; 7g - ported to the 83 by harper maddox .NOLIST #define equ .equ #define EQU .equ #define end .end #include "ti83asm.inc" #include "tokens.inc" .LIST .org 9327h text_mem = savesscreen graph_mem = plotsscreen DefaultSpriteHeight = 5 top = TEXT_MEM bot = TEXT_MEM+1 ShipY = TEXT_MEM+2 Crashtest = TEXT_MEM+3 Score = TEXT_MEM+10 LCDINST .equ 10h ; simple equates for bufcpy LCDDATA .equ LCDINST+1 nop ;these 2 lines identify the program jr prog_start ;as AShell-compatable .dw $0000 ;Version of table .dw desc ;Points to the program description .dw $0000 ;Points to an 8x8 icon .dw $0000 ;For future use ( *Libraries*? :) prog_start: ld hl,0 ld (Score),hl ld (Crashtest),hl call _grbufclr Titleloop: ld hl,black ld de,GRAPH_MEM+233 ld bc, 248 ldir call bufcpy ld hl,black ld de,GRAPH_MEM+233 ld bc, 248 ldir call bufcpy ld hl,gray ld de,GRAPH_MEM+233 ld bc, 248 ldir call bufcpy call getkey cp 105 jr nz,Titleloop ld hl,32 ld (ShipY),hl ; LD HL, APD_BUF ; LD DE, APD_BUF+1 ; LD BC, 768 ; LD (HL), 0 ; LDIR ld hl,16 ld (top),hl ld hl,20 ld (bot),hl ld hl,start ld de, plotsscreen ld bc, $300 ldir ld hl,29 ld (ShipY),hl call PutSpr call bufcpy Wait1: call getkey cp 26 jr nz,Wait1 Main: call Scroll call RAND cp 63 call c,Topinc call nc,Topdec call RAND cp 63 call c,Botinc call nc,Botdec call PutSpr call Putsmoke call Mine call bufcpy ld b,25 ld hl,(ShipY) ld a,l call Hit ld b,25 ld hl,(ShipY) ld a,l add a,4 call Hit ld b,31 ld hl,(ShipY) ld a,l add a,2 call Hit ld b,25 ld hl,(ShipY) ld a,l add a,3 call Hit ld hl,(Crashtest) ld a,l cp 1 jr z,Lose LD A, $FF \ OUT ($01), A LD A, $BF \ OUT ($01), A IN A, ($01) BIT 6, A \ RET Z BIT 5, A \ CALL Z, Pause LD A, $FF \ OUT ($01), A LD A, $FE \ OUT ($01), A IN A, ($01) BIT 0, A \ CALL Z, Down BIT 3, A \ CALL Z, Up jr Main Lose: call _homeup LD HL,ScoreStr call _puts ; write "Score: " LD HL,(Score) call _disphl call _newline ld hl,hiscor call _puts ; write highscore: " ld hl,(hi) call _disphl ld hl,(hi) ex de,hl ld hl,(Score) call _cphlde call nc,newhi e2: call getkey cp 105 jp nz,e2 RET Keywait: call getkey cp 105 jr nz,Keywait ret Hit: LD C,A LD A, B LD B, 0 LD H, B LD L, C ADD HL, HL ADD HL, BC ADD HL, HL ADD HL, HL LD C, A SRL C SRL C SRL C ADD HL, BC LD BC, GRAPH_MEM ADD HL, BC LD B, %10000000 AND %00000111 JR Z, Hitdone LD C, A LD A, B LD B, C ShloopGetPix: RRA DJNZ ShloopGetPix LD B, A Hitdone: LD A, (HL) AND B jr z,Crash RET Crash: ld hl,1 ld (Crashtest),hl ret Pause: call getkey cp 26 jr nz,Pause ret Scroll: ld hl,(Score) inc hl ld (Score),hl ld a,8 Scrollloop: call Scrollscr dec a jr nz,Scrollloop call bufcpy ret Scrollscr: LD HL, GRAPH_MEM+767 LD B, 64 _LLoop: SLA (HL) push bc ld b,11 _LLOOP2: DEC HL RL (HL) djnz _LLOOP2 DEC HL pop bc DJNZ _LLoop ret Topinc: ld c,$FF ld hl,GRAPH_MEM+11 ld de,(top) ld a,e cp 40 jr z,Toploop inc de inc de ld (top),de ld a,e jr Toploop Topdec: ld c,$FF ld hl,GRAPH_MEM+11 ld de,(top) ld a,e cp 2 jr z,Toploop dec de dec de ld (top),de ld a,e Toploop: ld (hl),c ld b,12 Toploopinc: inc hl dec b jr nz,Toploopinc dec a jr nz,Toploop Call bufcpy ret Botinc: ld c,$FF ld hl,GRAPH_MEM+767 ld de,(bot) ld a,e cp 40 jr z,Botloop ld a,0 add a,e ld de,(top) add a,e cp 50 jr nc,Botdec ld de,(bot) inc de inc de ld (bot),de ld a,e jr Botloop Botdec: ld c,$FF ld hl,GRAPH_MEM+767 ld de,(bot) ld a,e cp 2 jr z,Botloop dec de dec de ld (bot),de ld a,e Botloop: ld (hl),c ld b,12 Botloopinc: dec hl dec b jr nz,Botloopinc dec a jr nz,Botloop Call bufcpy ret Up: ld hl,(ShipY) dec hl dec hl ld (ShipY),hl ret Down: ld hl,(ShipY) inc hl inc hl ld (ShipY),hl ret Putsmoke: ld b,16 ld hl,(ShipY) ld c,l ld hl,Smoke call PutSprClp ret PutSpr: ld b,24 ld hl,(ShipY) ld c,l ld hl,Ship call PutSprClp ret PutSprClp: PUSH BC \ PUSH DE \ PUSH HL \ PUSH IX ; ** Save Registers PUSH HL \ POP IX ; LD IX, HL __Change_1: LD D, DefaultSpriteHeight BIT 7, C \ JR NZ, _PSC_NoBotClip ; If Y is negative, clip top _PSC_BotClip: LD A, 63 SUB C \ JP C, _PSC_Done __Change_2: CP DefaultSpriteHeight-1 JR NC, _PSC_NoVertClip ; If the sprite fits, done clipping INC A JR _PSC_ClipTop _PSC_NoBotClip: LD A, C __Change_3: CP -(DefaultSpriteHeight-1) JR C, _PSC_Done ; If Y < -(DefaultSpriteHeight-1) then done _PSC_TopClip: LD L, A NEG \ LD E, A ; Find number to shift LD A, L __Change_4: ADD A, DefaultSpriteHeight LD D, 0 \ ADD IX, DE LD C, D ; C = 0 or -1 if at top-left _PSC_ClipTop: LD D, A _PSC_NoVertClip: LD E, $FF \ LD A, B BIT 7, A \ JR Z, _PSC_NoLeftClip ; If X is non-negative, check right side _PSC_LeftClip: CP -7 \ JR C, _PSC_Done ; If X is less than -7, done NEG \ LD H, B \ LD B, A ; Find number to shift right _PSC_LeftLoop: SRL E ; Shift mask to right DJNZ _PSC_LeftLoop LD A, H \ ADD A, 96 \ LD B, A ; Shift sprite up a row. JR _PSC_ClipDone2 _PSC_NoLeftClip: SUB 89 \ JR C, _PSC_ClipDone ; If X < 89 then no need to clip on right _PSC_RightClip: CP 7 \ JR NC, _PSC_Done ; If Shift # > 7 then done LD H, B \ LD B, A \ INC B _PSC_RightLoop: SLA E ; Shift mask to left DJNZ _PSC_RightLoop LD B, H _PSC_ClipDone: INC C _PSC_ClipDone2: LD A, B \ LD B, 0 ; [11] Save B, Clear B so we can add BC LD H, B \ LD L, C ; [ 8] HL = BC ADD HL, BC \ ADD HL, BC ; [22] HL = HL + 12 ADD HL, HL \ ADD HL, HL ; [22] LD C, A ; [ 4] SRL C \ SRL C \ SRL C ; [24] C = B \ 8 ADD HL, BC ; [11] LD BC, GRAPH_MEM-12 ; [10] ADD HL, BC ; [11] LD B, D ; Number of Rows AND %00000111 ; [ 7] JR Z, _PSC_NoShift LD C, A ; Number to Shift _PSC_LineLoop: PUSH BC PUSH DE LD A, E __Change_5: AND (IX+DefaultSpriteHeight) LD D, A LD A, E CPL \ OR (IX+0) LD B, C LD C, %11111111 LD E, %00000000 _PSC_ShiftNum: SCF \ RRA \ RR C SRL D \ RR E ; Shift DJNZ _PSC_ShiftNum AND (HL) \ XOR D \ LD (HL), A \ INC HL ; Or data with background LD A, C \ AND (HL) \ XOR E \ LD (HL), A ; Xor Mask, etc. INC IX \ LD C, 11 \ ADD HL, BC ; Next row POP DE POP BC DJNZ _PSC_LineLoop _PSC_Done: POP IX \ POP HL \ POP DE \ POP BC ; ** Restore registers RET _PSC_NoShift: LD DE, 12 ; Add 12 each row _PSC_NoShiftLoop: LD A, (HL) AND (IX+0) __Change_6: XOR (IX+DefaultSpriteHeight) LD (HL), A ; Or data with background ADD HL, DE \ INC IX ; Next row DJNZ _PSC_NoShiftLoop JR _PSC_Done Mine: call RAND cp 20 ret nc ld a,0 ld de,(top) add a,e ld de,(bot) add a,e cp 25 ret nc ld a,64 sub e ld c,a Randmine: call RAND ld h,a cp c jr nc,Randmine ld de,(top) cp e jr c,Randmine ld c,h ld b,88 ld hl,Minespr call PutSprClp ret rand: ld a,r and %1111111 ret getkey: call _zerooop1 call _getk call _op2toop1 call _convop1 ld a,e ret bufcpy: ld hl,8e29h ld b,40h ; bufcpy that is WAY faster DI ; than _grbufcpy_v ld a,7 call LCDBusy out (lcdinst),a ld a,127 bclcpy: push bc inc a ld (08012h),a call s7port10 call lcdbusy out (lcdinst),a ld a,20h call lcdbusy out (lcdinst),a ld b,12 bcl2cpy: ld a,(hl) inc hl call lcdbusy out (lcddata),a djnz bcl2cpy pop bc ld a,(08012h) djnz bclcpy ld a,5 call lcdbusy out (lcdinst),a ei ret lcdbusy: PUSH AF inc hl dec hl POP AF RET s7port10: push af ld a,7 call lcdbusy out (lcdinst),a pop af ret Minespr: .db %01011010 .db %00111100 .db %01111110 .db %00111100 .db %01011010 .db %01011010 .db %00111100 .db %01111110 .db %00111100 .db %01011010 Ship: .db %01000000 .db %11111000 .db %01111111 .db %11111100 .db %01100000 .db %01000000 .db %11111000 .db %01111111 .db %11111100 .db %01100000 Smoke: .db %01000000 .db %11111000 .db %01111111 .db %11111100 .db %01100000 .db %01000000 .db %10010001 .db %01111111 .db %00101000 .db %01100000 start: .db 0,0,0,0,0,0,0,0,0,3,255,255,0,0,0,0,0,0,0,0,0,3,255,255,0,0,0,0,0,0,0 .db 0,0,3,255,255,0,0,0,0,0,0,0,0,0,3,255,255,0,0,0,0,0,0,0,0,0,1,255,255,0,0 .db 0,0,0,0,0,0,0,1,255,255,0,0,0,0,0,0,0,0,0,3,255,255,0,0,0,0,0,0,0,0,0 .db 3,255,255,0,0,0,0,0,0,0,0,0,3,255,255,0,0,0,0,0,0,0,0,0,3,255,255,0,0,0,0 .db 0,0,0,0,0,3,255,255,0,0,0,0,0,0,0,0,0,3,255,255,192,0,0,0,0,0,0,0,0,3,255 .db 255,63,128,0,0,0,0,0,0,0,1,255,255,0,127,255,254,0,0,0,0,0,0,129,255,0,0,0,1,128,0 .db 0,0,0,0,0,0,63,254,0,0,64,0,0,0,0,0,0,0,62,2,166,76,32,0,0,0,0,0,0,0,63 .db 254,168,168,30,0,0,0,0,0,0,0,62,2,164,172,1,128,0,0,0,0,0,0,63,254,162,232,2,64,0,0 .db 0,0,0,0,32,2,236,168,2,32,0,0,0,0,0,0,63,254,0,0,2,160,0,0,0,0,0,0,0,0,0 .db 0,2,160,0,0,0,0,0,0,255,255,255,255,255,144,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0 .db 0,0,255,255,255,255,255,240,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .db 0,0,0,0,0,0,0,0,128,0,0,0,0,0,0,0,0,0,0,33,240,16,0,0,0,0,0,0,0,0,0 .db 16,254,8,0,0,0,0,0,0,0,0,0,41,248,20,0,0,0,0,0,0,0,0,0,68,192,34,0,0,0,0 .db 0,0,0,0,0,255,255,255,255,255,224,0,0,0,0,0,0,0,0,0,0,0,32,0,0,0,0,0,0,247,255 .db 255,249,255,224,0,0,0,0,0,0,20,0,0,18,0,32,0,0,0,0,0,0,21,231,218,164,7,192,0,0,0 .db 0,0,0,21,72,53,72,8,0,0,0,0,0,0,0,20,151,106,144,8,0,0,0,0,0,0,0,21,62,213,32 .db 8,0,0,0,0,0,0,0,20,0,2,64,8,0,0,0,0,0,0,0,247,255,252,255,248,0,0,0,0,0,62 .db 63,0,0,0,0,32,0,0,0,0,0,255,255,255,255,255,255,224,0,0,0,0,0,255,255,0,0,0,64,0,0 .db 0,0,0,1,255,255,255,255,252,64,0,0,0,0,0,1,255,255,0,0,0,64,0,0,0,0,0,1,255,255,0 .db 0,0,128,0,0,0,0,0,3,255,255,255,255,240,128,0,0,0,0,0,3,255,255,0,0,1,0,0,0,0,0 .db 0,3,255,255,0,0,6,0,0,0,0,0,0,3,255,255,255,224,56,0,0,0,0,0,0,3,255,255,0,31,192 .db 0,0,0,0,0,0,1,255,255,0,0,0,0,0,0,0,0,0,1,255,255,0,0,0,0,0,0,0,0,0,1 .db 255,255,0,0,0,0,0,0,0,0,0,1,255,255,0,0,0,0,0,0,0,0,0,1,255,255,0,0,0,0,0 .db 0,0,0,0,3,255,255,0,0,0,0,0,0,0,0,0,3,255,255,0,0,0,0,0,0,0,0,0,3,255,255 .db 0,0,0,0,0,0,0,0,0,3,255,255,0,0,0,0,0,0,0,0,0,3,255,255 gray: .db 0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0 .db 255,255,255,254,255,255,255,255,255,252,255,255,255,255,255,254,255,255,255,255,255,252,255,255,255,255,255,254,255,255,255 .db 255,255,249,255,255,255,255,255,254,255,255,255,255,255,249,255,255,255,255,255,254,255,255,255,255,255,243,255,255,255,255 .db 255,254,255,255,255,255,255,243,255,255,255,255,255,254,255,255,255,255,255,231,255,255,255,255,255,254,255,255,255,255,255 .db 231,255,255,255,255,255,254,255,255,255,255,255,207,255,255,255,255,255,254,255,255,255,255,255,207,255,255,255,255,255,254 .db 255,255,255,255,255,159,255,255,255,255,255,254,255,255,255,255,255,159,255,255,255,255,255,254,255,255,255,255,255,63,255 .db 255,255,255,255,254,255,255,255,255,255,63,255,255,255,255,255,254,255,255,255,255,254,127,255,255,255,255,255,254,255,255 .db 255,255,254,127,255,255,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,0 black: .db 0,0,0,0,0,0,0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255 .db 255,255,255,255,255,255,255,255,255,255,255,255,0,0,0,3,128,0,0,0,0,7,128,0,0,0,0,3,191,249,255 .db 231,187,79,0,0,0,0,0,3,191,249,255,231,187,79,0,0,0,0,0,3,190,243,192,15,118,158,0,0,0,0 .db 0,3,190,243,192,15,118,158,0,0,0,0,0,3,189,231,128,30,237,60,0,0,0,0,0,3,189,231,128,30,237 .db 60,0,0,0,0,0,3,131,207,127,61,218,120,0,0,0,0,0,3,131,207,127,61,218,120,0,0,0,0,0,3 .db 135,158,254,123,180,240,0,0,0,0,0,3,135,158,30,123,180,240,0,0,0,0,0,3,143,63,252,247,105,224,0 .db 0,0,0,0,3,143,63,252,247,105,224,0,0,0,0,0,3,128,0,0,0,3,192,0,0,255,255,255,255,255,255 .db 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0 newhi: ld hl,(Score) ld (hi),hl ret Youlose: .db "You lose !",0 desc: .DB "--==7G==-- v1.5 by BtC", 0 ScoreStr: .DB "Score: ", 0 hiscor: .db "Hi: ",0 hi: .dw 0 .end .END