;+------------------------------------------------------+ ;| Box World v1.0 | ;| by Joe Wingbermuehle | ;| 12-05-1997 | ;+------------------------------------------------------+ #define getk $4A18 #define getkey $4CFE #define clrscr $4755 #define putc $4705 ;write a char (update cur) #define putmap $4701 ;write a char (do not updated cur) #define putps $4715 #define setxxop1 $4A74 #define cpop1op2 $4166 #define currow $800C #define curcol $800D #define rindoff $4795 #define sram $8265 ;apd ram #define num_of_levels $06 ; duh ;---------- Variables ---------- #define loc sram+$00 ; location of '+' #define lev sram+$02 ; current level #define posc sram+$03 ; temporary curcol var #define posr sram+$04 ; temporary currow var #define level sram+$05 ; current level matrix ($80 bytes) .org $9327 ; jump offset ;---------- Setup the game ----------- call rindoff call clrscr ld hl,$0202 ld (currow),hl ld hl,info1 call putps ld hl,$0503 ld (currow),hl ld hl,info2 call putps ld hl,$0204 ld (currow),hl ld hl,info3 call putps call getkey ld hl,$0000 ld (loc),hl ld a,1 ld (lev),a ;---------- Load a level ---------- start: ld hl,level ld b,$11 lsl0: ld (hl),'ρ' inc hl djnz lsl0 ld hl,level1 ld b,$60 lsl1: dec hl djnz lsl1 ld a,(lev) ld b,a ld de,$0060 lsl2: add hl,de djnz lsl2 ld de,level+$11 ld bc,$005E ldir ld a,(hl) ld (posc),a ld d,a inc hl ld a,(hl) ld (posr),a ld b,a ld e,$10 ld a,$00 lsl3: add a,e djnz lsl3 add a,d ld (loc),a ld hl,level+$6F ld b,$11 lsl4: ld (hl),'ρ' inc hl djnz lsl4 ;---------- Draw the level ---------- ld hl,$0000 ld (currow),hl ld hl,level ld b,$7F dloop: push bc ld a,(hl) call putc dec b inc hl pop bc djnz dloop ld a,(hl) call putmap ld a,(posr) ld (currow),a ld a,(posc) ld (curcol),a ld a,'+' call putmap ;---------- Main program loop ---------- main: call getk ld a,23 call cpaop2 jp z,exit ld a,24 call cpaop2 jp z,mLeft ld a,25 call cpaop2 jp z,mUp ld a,34 call cpaop2 jp z,mDown ld a,45 call cpaop2 jp z,start ld a,95 call cpaop2 jp z,levup ld a,85 call cpaop2 jp z,levdwn ld a,26 call cpaop2 jr nz,main ;---------- Move right ---------- mRight: ld a,(curcol) cp 0Eh jp z,main call align inc de ld (loc),de ld a,(hl) call putc ld a,'+' call putmap call align ld a,(hl) cp 'ρ' jp z,mLeft cp 'Π' jr z,mor jp main mor: call align inc hl ld a,(hl) cp 'ρ' jp z,mLeft cp 'Π' jp z,mLeft cp ':' jr z,mrcn1 ld a,'Π' ld (hl),a mrcn1: dec hl ld a,' ' ld (hl),a ld a,(curcol) inc a ld (curcol),a call align inc hl ld a,(hl) cp ':' jr z,mrcn2 ld a,'Π' call putmap mrcn2: ld a,(curcol) dec a ld (curcol),a jp winc ;---------- Move left ---------- mLeft: ld a,(curcol) cp 1 jp z,main dec a ld (curcol),a ld a,'+' call putc call align dec de ld (loc),de ld a,(hl) call putmap ld a,(curcol) dec a ld (curcol),a call align ld a,(hl) cp 'ρ' jp z,mRight cp 'Π' jr z,mol jp main mol: call align dec hl ld a,(hl) cp 'ρ' jp z,mRight cp 'Π' jp z,mRight cp ':' jr z,mlcn1 ld a,'Π' ld (hl),a mlcn1: inc hl ld a,' ' ld (hl),a ld a,(curcol) dec a ld (curcol),a call align dec hl ld a,(hl) cp ':' jr z,mlcn2 ld a,'Π' call putmap mlcn2: ld a,(curcol) inc a ld (curcol),a jp winc ;---------- Move up ---------- mUp: ld a,(currow) cp 1 jp z,main call align ld a,(hl) call putmap ld a,(currow) dec a ld (currow),a ld hl,(loc) ld bc,$0010 sbc hl,bc ld (loc),hl ld a,'+' call putmap call align ld a,(hl) cp 'ρ' jp z,mDown cp 'Π' jr z,moup jp main moup: call align ld bc,$0010 sbc hl,bc ld a,(hl) cp 'ρ' jp z,mDown cp 'Π' jp z,mDown cp ':' jr z,mucn1 ld a,'Π' ld (hl),a mucn1: ld bc,$0010 add hl,bc ld a,' ' ld (hl),a ld a,(currow) dec a ld (currow),a ld bc,$0020 sbc hl,bc ld a,(hl) cp ':' jr z,mucn2 ld a,'Π' call putmap mucn2: ld a,(currow) inc a ld (currow),a jp winc ;---------- Move down ---------- mDown: ld a,(currow) cp 6 jp z,main call align ld a,(hl) call putmap ld a,(currow) inc a ld (currow),a ld hl,(loc) ld bc,$0010 add hl,bc ld (loc),hl ld a,'+' call putmap call align ld a,(hl) cp 'ρ' jp z,mUp cp 'Π' jr z,modwn jp main modwn: call align ld bc,$0010 add hl,bc ld a,(hl) cp 'ρ' jp z,mUp cp 'Π' jp z,mUp cp ':' jr z,mdcn1 ld a,'Π' ld (hl),a mdcn1: call align ld a,' ' ld (hl),a ld a,(currow) inc a ld (currow),a ld bc,$0020 add hl,bc ld a,(hl) cp ':' jr z,mdcn2 ld a,'Π' call putmap mdcn2: ld a,(currow) dec a ld (currow),a jp winc ;---------- Point hl to level matrix element ---------- align: ld de,(loc) ld hl,level add hl,de ret ;---------- Compare A with OP2 ---------- cpaop2: call setxxop1 call cpop1op2 ret ;---------- Move up/down a level ---------- levdwn: ; move down a level ld a,(lev) cp 1 jr z,levx dec a jr levx levup: ; move up a level ld a,(lev) cp num_of_levels jr z,levx inc a levx: ld (lev),a jp start ;---------- Winner? ---------- winc: ld hl,level ld b,$80 wincl: ld a,(hl) cp 'Π' inc hl jp z,main djnz wincl ld a,(lev) inc a ld (lev),a cp num_of_levels+1 jp nz,start call clrscr ld hl,$0403 ld (currow),hl ld hl,won call putps call getkey exit: ret ; exit the program ;---------- Constants ---------- info1: .db $0D,"BoxWorld v1.0" info2: .db $06,"by Joe" info3: .db $0D,"Wingbermuehle" won: .db $08,"You Won!" ;---------- Levels ---------- ; (level data) - (top+x)(left+x) level1: .db "ρρρρρ ρρρρρρρ" .db "ρρρρρρΠ ρρρρρρρ" .db "ρρρρρρ Πρρρρρρρ" .db "ρρρρ Π Π ρ ρ" .db "ρ ρ ρρ ρ ρ" .db "ρ Π Π :" .dw $0607 level2: .db "ρρρρρρ ρ ρρρρ" .db "ρρρρρρ ρ ρρρρ" .db "ρρρρρρΠ Π Π ρρρρ" .db "ρρρρρρ Πρρ ρρρρ" .db "ρρρρρρ Π ρ ρρρρρ" .db "ρρρρ: ρρρρ" .dw $0607 level3: .db "ρρρρ: ρρρρρρ" .db "ρρρρρρ Πρρρρρρ" .db "ρρρρ ΠρΠ Π ρρρρ" .db "ρρρρ ΠΠ ρΠ ρρρρ" .db "ρρρρ ρ ρρρρ" .db "ρρρρρρρ ρρρρρ" .dw $0608 level4: .db "ρρρ: ρ ρρρρρ" .db "ρρρ Π Π ρρρρ" .db "ρρ ΠρΠ ρρ ρρρ" .db "ρρ ρρ ΠρΠ ρρρ" .db "ρρρ Π Π ρρρρ" .db "ρρρρ ρ ρρρρ" .dw $0609 Level5: .db "ρ ρ ρρρ ρ" .db "ρρ Π Π Π ρ ρ" .db "ρρ ρΠ ρ ρρρ ρ" .db "ρρρ Π ΠΠ Π ρρρ" .db "ρρρ ρΠ ρρρρρρ" .db "ρ: ρρρρρρ" .dw $0608 level6: .db "ρρρρρ ρ ρρρ" .db "ρρρρρ ΠΠΠ Π ρρρ" .db "ρρρρρ Π ρ Π ρρρ" .db "ρρρρρ ΠΠΠ Π ρρρ" .db "ρρ: ρρρ" .db "ρρρρρρρρρρρρρρρ" .dw $0308 .end END