vars equ 8265h v_randptr equ vars+0 v_currcontr equ vars+2 v_defcontr equ vars+3 v_tunneloffset equ vars+4 v_tunnely equ vars+5 v_tunnelx equ vars+6 CONTRAST equ 8008h _DELMEM equ 44b2h _INSERTMEM equ 4432h _ERRNOTENOUGHMEM equ 464eh _rstrShadow equ 47a1h _clrScrnFull equ 475dh _puts equ 470dh _newline equ 473dh _runIndicOff equ 4795h _homeUp equ 4775h _dispDone equ 47f1h onInterrupt equ 4 onRunning equ 3 onflags equ 9 CURROW equ 800ch org 9327h ld hl,48*64 ;chunky buffer size push hl call _ERRNOTENOUGHMEM pop hl ld de,chunky call _INSERTMEM call _runIndicOff di ld a,(CONTRAST) add a,18h or c0h ld (v_currcontr),a ld (v_defcontr),a ld a,ffh call fadecontr call black ld hl,chunky call c2p ld b,80h call delay ld hl,img_linusakesson ld bc,0919h ;size, position call lcdoutr ld a,(v_defcontr) call fadecontr ld b,40h call delay ld a,ffh call fadecontr call black ld hl,chunky call c2p ld b,80h call delay ld hl,img_presents ld bc,061ch call lcdoutr ld a,(v_defcontr) call fadecontr ld b,40h call delay ld a,ffh call fadecontr ld b,a0h call delay call black ld hl,chunky call c2p ld a,(v_defcontr) call setcontr ld hl,0000h ;start getting random numbers from here ld (v_randptr),hl ld bc,40h m_lp1: push bc ld hl,img_ride ld bc,6*36 ld de,chunky+48*15 call fiery pop bc dec bc ld a,b or c jr nz,m_lp1 m_lp2: ld hl,img_ride ld bc,6*36 ld de,chunky+48*15 call fiery ld a,(v_currcontr) inc a jr z,m_sk2 call setcontr jr m_lp2 m_sk2: ld a,(v_defcontr) call setcontr xor a ld (v_tunneloffset),a ld hl,tunnelscript ld b,tunnelscript_l m_lp3: ld a,(hl) inc hl ld (v_tunnely),a ld a,(hl) inc hl ld (v_tunnelx),a push bc ld b,(hl) inc hl push hl call dosometunnel pop hl pop bc djnz m_lp3 m_lp4: ld a,(v_currcontr) inc a jr z,m_sk4 call setcontr ld hl,img_tunnelp1 call drawtunnel jr m_lp4 m_sk4: ld hl,img_graphix1 ld bc,4000h call lcdoutr ld a,(v_defcontr) call fadecontr ld b,0 call delay ld b,20h call delay ld a,ffh call fadecontr xor a ld (v_tunnelx),a ld a,2 ld (v_tunnely),a m_lp5: ld a,(v_currcontr) dec a ld hl,v_defcontr cp (hl) jr z,m_sk5 call setcontr ld hl,img_tunnelp2 call drawtunnel jr m_lp5 m_sk5: ld b,8h call dosometunnel2 ld a,01h ld (v_tunnelx),a m_lp6: ld b,10h call dosometunnel2 ld a,(v_tunnelx) inc a ld (v_tunnelx),a ld a,(v_tunnely) inc a cp ah jr z,m_sk6 ld (v_tunnely),a jr m_lp6 m_sk6: call black ld b,20h m_lp7: push bc ld hl,img_theend ld bc,6*1 ld de,chunky+48*24 call fieryx call whitetheend ld hl,chunky call c2p pop bc djnz m_lp7 m_lp8: ld hl,img_theend ld bc,6*1 ld de,chunky+48*24 call fieryx call whitetheend ld hl,chunky call c2p ld a,(v_currcontr) inc a jr z,m_sk8 call setcontr jr m_lp8 m_sk8: quit: res onRunning,(iy+onflags) ld de,48*64 ld hl,chunky call _DELMEM call _clrScrnFull call _homeUp ld hl,txt1 call _puts call _dispDone ld hl,0001h ld (CURROW),hl ld a,(v_defcontr) call fadecontr ret whitetheend: ld hl,img_theend+6 ld b,6*17 ld de,chunky+48*25 wte_l2: ld a,(hl) inc hl push bc ld b,8 wte_l1: rla push af ld a,0 jr c,wte_white ld a,2 wte_white: ld (de),a pop af inc de djnz wte_l1 pop bc djnz wte_l2 ret dosometunnel2: push bc ld hl,img_tunnelp2 call drawtunnel pop bc djnz dosometunnel2 ret dosometunnel: push bc ld hl,img_tunnelp1 call drawtunnel pop bc djnz dosometunnel ret drawtunnel: push hl ld a,(v_tunnely) rla rla rla rla and f0h ld b,a ld a,(v_tunnelx) or b ld hl,v_tunneloffset add a,(hl) ld (hl),a ld hl,tunnelmap ld bc,48*64 ld de,chunky drtu_lp: ld a,(v_tunneloffset) add a,(hl) ex (sp),hl push hl push de ld e,a ld d,0 add hl,de pop de ldi pop hl ex (sp),hl inc hl ld a,b or c jr nz,drtu_lp pop hl ld hl,chunky jp c2p fiery: call fieryx ld hl,chunky jp c2p ;display fieryx: fi_imglp: ld a,(hl) push bc ld b,8 fi_bitlp: rla jr nc,fi_noimg push af call random and 3 ld (de),a pop af fi_noimg: inc de djnz fi_bitlp pop bc inc hl dec bc ld a,b or c jr nz,fi_imglp fieryfire: ld hl,chunky ld bc,48*63 ld de,48 fi_firelp: inc hl ld a,(hl) add hl,de add a,(hl) dec hl add a,(hl) dec hl add a,(hl) inc hl sbc hl,de add a,2 rra rra and 3 ld (hl),a inc hl dec bc ld a,b or c jr nz,fi_firelp ret black: ld hl,chunky ld a,2 ld (hl),a ld de,chunky+1 ld bc,48*64-1 ldir ret random: push hl ld hl,(v_randptr) inc hl res 7,h res 6,h ld (v_randptr),hl ld a,(hl) pop hl ret fadecontr: ld c,a ld a,(v_currcontr) fadec_lp: ld (v_currcontr),a cp c ret z jr c,fadec_add dec a ld b,14 call delay out (10h),a jr fadec_lp fadec_add: inc a ld b,14 call delay out (10h),a jr fadec_lp lcdoutr: ld a,c or 80h call lcdb out (10h),a ld a,20h call lcdb out (10h),a push bc ld b,12 lcdor_1: ld a,(hl) inc hl call lcdb out (11h),a djnz lcdor_1 pop bc inc c djnz lcdoutr ret setcontr: ld (v_currcontr),a call lcdb out (10h),a ret delay: push bc ld b,0 delay_w1: call lcdb call lcdb djnz delay_w1 pop bc djnz delay ret ;===================================================== ;=== Fast Chunky-2-Planar Routine by Linus Akesson === ;===================================================== ;=== INPUTS: hl is a pointer to a 48*64 chunky === ;=== buffer, where every byte is 0, 1 or === ;=== 2 depending on the darkness. === ;=== The buffer is not trashed. === ;=== OUTPUTS: The lcd is updated. === ;=== TRASH: All registers except e, ix and iy === ;=== are TRASHED and must be preserved by === ;=== the caller. Additionaly, the lcd is === ;=== placed in y increment mode, which === ;=== may confuse some ti-os routines. === ;===================================================== c2p: ld a,07h ;~Y call lcdb out (10h),a ld c,80h ld b,40h c2p_ylp: call lcdb ld a,c out (10h),a ld a,20h call lcdb out (10h),a push bc ld b,ch c2p_xlp: xor a sub (hl) rl d or a jr z,c2p_x1 cp ffh c2p_x1: rl d inc hl xor a sub (hl) rl d or a jr z,c2p_x2 cp ffh c2p_x2: rl d inc hl xor a sub (hl) rl d or a jr z,c2p_x3 cp ffh c2p_x3: rl d inc hl xor a sub (hl) rl d or a jr z,c2p_x4 cp ffh c2p_x4: rl d inc hl ;call lcdb ld a,d out (11h),a djnz c2p_xlp pop bc inc c djnz c2p_ylp ret lcdb: push af inc hl dec hl pop af ret txt1: defm "Linus Akesson 98",0 img_ride: include Main:Gfx/PPaint/Brushes/ride.caz img_linusakesson: include Main:Gfx/PPaint/Brushes/linusa-inv.caz img_presents: include Main:Gfx/PPaint/Brushes/presents.caz img_theend: include Main:Gfx/PPaint/Brushes/theend.caz img_tunnelp1: include Main:Gfx/PPaint/Brushes/tpatt_squares.chunky.caz img_tunnelp2: include Main:Gfx/PPaint/Brushes/star.chunky.caz tunnelmap: include StormC:prg/Tunnel/tunnelmap.caz tunnelscript: defm 03h,00h,40h defm 02h,00h,10h defm 01h,00h,08h defm 00h,00h,04h defm ffh,00h,04h defm feh,00h,08h defm fdh,00h,10h defm fch,00h,20h defm fch,01h,20h defm feh,02h,08h defm 00h,03h,08h defm 02h,04h,08h defm 03h,05h,08h defm 04h,06h,30h tunnelscript_l equ ($-tunnelscript)/3 img_graphix1: include Main:Gfx/PPaint/Brushes/eye.caz chunky: