Size benim çok hoşuma giden bir örneği paste ediyorum. Assembler, Basic ve ucundan da C'yi (hatta PHP'yi) kat karıştır birbirine, al sana Slang 🙂
URL:
http://www.ffd2.com/fridge/slang/
Örnek code:
*
* This program combines the scrolltext
* demo running in an interrupt with
* a Robin-inspired block sprite
* controllable by the joystick. It
* demonstrates interrupt programming
* as well as simple sprite commands.
*
* Stephen L. Judd
* 10/30/04
*
byte joycount=7 ;counter
byte joy2@$dc00,temp
byte sprite(63)@832
uint xpos=100
ubyte ypos=100
ubyte color=1
byte mesg(80)=[!s" Robin Harbron rules!!! "]
byte mesglen=23
byte row1(40)@$0400;first screen row
Scroll2_rowpos = 39 ;initial screen position
;
; Set up screen/color mem
;
fillmem($d800,$d800+39,01);Set color ram top row to white
fillmem($0400,$0400+39,32);And clear top row of screen
;
; Init scroll IRQ
;
DisableTimerAIRQ ;shut down CIA timer IRQ (kernal IRQ)
SetRaster(50)
SetIRQRoutine(Scroll1)
SetCol38 ;use 38 cols to make it smooth
EnableRasterIRQ
;
; Set up sprite
;
UseSpriteStuff
byte x
for x=0:62
sprite(x)=255
next
SetSpritePtr(0,13)
SpriteOn(0)
;
; Main loop
;
repeat
wait $d012,255 ;Update sprites off the display
SetSpriteX(0,xpos)
SetSpriteY(0,ypos)
SetSpriteColor(0,color)
wait joycount,0 ;Wait for IRQ signal
joycount = 1
temp = joy2 biteor 255
testall
case temp bitand 1 ;up
ypos = ypos-1
case temp bitand 2 ;down
ypos = ypos+1
case temp bitand 4 ;left
xpos = xpos-1
case temp bitand 8 ;right
xpos = xpos+1
case temp bitand 16 ;fire
inc color ;sprite color
endtest
forever
;-------------------------------
;
; IRQ routines
;
; The first IRQ routine fine-scrolls
; the screen and sets up the next IRQ.
;
;-------------------------------
irq Scroll1()
byte count
AckRasterIRQ ;acknowledge irq
SetScrollX(count) ;fine scroll
SetRaster(58) ;set next IRQ
SetIRQRoutine(Scroll2)
count=count-1
if count<0
Scroll2_flag = 1
count = 7
else
Scroll2_flag = 0
endif
endirq
;
; The second IRQ routine updates the
; message text as needed. By updating
; the text after the screen has been
; updated the scrolling is smooth.
;
irq Scroll2()_byte flag, byte rowpos
byte offset=0,endtext
AckRasterIRQ ;acknowledge irq
SetScrollX(7) ;Fix rest of screen
SetRaster(50)
SetIRQRoutine(Scroll1)
if flag=1
endtext = offset+39
if endtext > mesglen
endtext = mesglen
endif
row1$(rowpos:39) = mesg$(offset:endtext)
if rowpos>0
rowpos = rowpos-1;move mesg left
elsif offset < mesglen
offset = offset+1;if all the way left then move through message
else
rowpos = 39 ;reset if done
offset = 0
endif
endif
if joycount > 0 ;Decrease the joystick counter
joycount = joycount-1
endif
JmpKernalIRQ