===== Demo1 kode =====
Kompileres med pasmo
pasmo -d --tapbas demo1.asm demo1.tap
org 32768
start:
di ; no need to spend time reading keyboard etc.
call clearscreen
call clearattr
effects:
call effect1
call effect2
call effect3
call effect4
call effect5
call effect6
call effect7
call effect8
call shift_patterns
jr effects
effect1:
; pattern 11111122
ld hl,screenstart
ld de,screenstart+1
ld a,(pattern1)
ld bc,six_lines
ld (hl),a
ldir
ld a,(pattern2)
ld bc,two_lines
ld (hl),a
ldir
call copy_top_of_screen
ret
effect2: ; 21111112
ld hl,screenstart
ld de,screenstart+1
ld a,(pattern2)
ld bc,one_line
ld (hl),a
ldir
ld a,(pattern1)
ld bc,six_lines
ld (hl),a
ldir
ld a,(pattern2)
ld bc,one_line
ld (hl),a
ldir
call copy_top_of_screen
ret
effect3: ; 22111111
ld hl,screenstart
ld de,screenstart+1
ld a,(pattern2)
ld bc,two_lines
ld (hl),a
ldir
ld a,(pattern1)
ld bc,six_lines
ld (hl),a
ldir
call copy_top_of_screen
ret
effect4: ; 12211111
ld hl,screenstart
ld de,screenstart+1
ld a,(pattern1)
ld bc,one_line
ld (hl),a
ldir
ld a,(pattern2)
ld bc,two_lines
ld (hl),a
ldir
ld a,(pattern1)
ld bc,five_lines
ld (hl),a
ldir
call copy_top_of_screen
ret
effect5: ; 11221111
ld hl,screenstart
ld de,screenstart+1
ld a,(pattern1)
ld bc,two_lines
ld (hl),a
ldir
ld a,(pattern2)
ld bc,two_lines
ld (hl),a
ldir
ld a,(pattern1)
ld bc,four_lines
ld (hl),a
ldir
call copy_top_of_screen
ret
effect6: ; 11122111
ld hl,screenstart
ld de,screenstart+1
ld a,(pattern1)
ld bc,three_lines
ld (hl),a
ldir
ld a,(pattern2)
ld bc,two_lines
ld (hl),a
ldir
ld a,(pattern1)
ld bc,three_lines
ld (hl),a
ldir
call copy_top_of_screen
ret
effect7: ; 11112211
ld hl,screenstart
ld de,screenstart+1
ld a,(pattern1)
ld bc,four_lines
ld (hl),a
ldir
ld a,(pattern2)
ld bc,two_lines
ld (hl),a
ldir
ld a,(pattern1)
ld bc,two_lines
ld (hl),a
ldir
call copy_top_of_screen
ret
effect8: ; 11111221
ld hl,screenstart
ld de,screenstart+1
ld a,(pattern1)
ld bc,five_lines
ld (hl),a
ldir
ld a,(pattern2)
ld bc,two_lines
ld (hl),a
ldir
ld a,(pattern1)
ld bc,one_line
ld (hl),a
ldir
call copy_top_of_screen
ret
clearscreen:
; could be optimized using the push sp trick
xor a
ld hl,screenstart
ld de,screenstart+1
ld bc,screensize-1
ld (hl),a
ldir
xor a
out (254),a ; black border
ret
clearattr:
; could be optimized using the push sp trick
ld a,56 ; black ink, white paper
ld hl,attrstart
ld bc,attrsize-1
ld de,attrstart+1
ld (hl),a
ldir
ret
copy_top_of_screen:
; could be optimized using the push sp trick
ld bc,16*one_line
ld hl,screenstart
ld de,screenstart+8*one_line
ldir
ret
shift_patterns:
ld hl,pattern1
rlc (hl)
ld hl,pattern2
rlc (hl)
rlc (hl)
ret
pattern1: defb %11111100
pattern2: defb %00000011
screenstart: equ 16384
screensize: equ 6144
set_border: equ #229B
attrstart: equ screenstart+screensize
attrsize: equ 24*32
one_line: equ 32*8
two_lines: equ 2*one_line
three_lines: equ 3*one_line
four_lines: equ 4*one_line
five_lines: equ 5*one_line
six_lines: equ 6*one_line
END start