;################################################################## ; ; P H O E N I X F O R T I - 8 6 ; ; Programmed by Patrick Davidson (pad@calc.org) ; ; Copyright 2004 by Patrick Davidson. This software may be freely ; modified and/or copied with no restrictions. There is no warranty. ; ; This file was last updated May 12, 2004. ; ;################################################################## ;############## Definitions of system calls #define ROM_CALL(addr) call addr DO_LD_HL_MHL =$4010 ; _ldHLind UNPACK_HL =$4044 ; _divHLby10 _flushAllMenus =$49DC _putc =$4A2B _puts =$4A37 CLEARLCD =$4A7E ; _clrLCD _runindicoff =$4AB1 ;############## Definitions of memory areas GFX_AREA =$9400 EXT_LEVEL =$B100 VIDEO_2 =$CA00 LEVEL_LOCATION =$B100 CONTRAST =$C008 CURSOR_ROW =$C00F ; _curRow CURSOR_COL =$C010 ; _curCol TEXT_MEM =$C0F9 ; _textShadow _asm_exec_ram =$D748 ;############## Definitions of GET_KEY values K_MORE =$38 K_EXIT =$37 K_SECOND =$36 K_F1 =$35 K_F2 =$34 K_F3 =$33 K_F4 =$32 K_F5 =$31 K_ALPHA =$30 K_DEL =$20 K_3 =$12 K_CLEAR =$0F K_MINUS =$0B K_PLUS =$0A K_ENTER =$09 K_UP =$04 K_DOWN =$01 ;############## Good stuff #define __TI86__ #include "phoenixz.i" ;############## TI-86 program header (for YAS, etc.) .org _asm_exec_ram nop jp startup .dw 0 .dw title #include "vars.asm" title: .db "Phoenix ",VERSION," by Patrick D",0 ;############## Initialization / exit startup: call _flushAllMenus call _runindicoff call main ld hl,variable_name call $42d7 ;_MOV10TOOP1 call $46CB ; _FINDSYM; BDE -> start of program ld hl,perm_vars+4-_asm_exec_ram ld a,b add hl,de adc a,0 ; AHL -> perm storage in variable call $5285 ; _SET_ABS_DEST_ADDR ld a,0 ld hl,perm_vars call $4647 ; _SET_ABS_SRC_ADDR ld a,0 ld hl,perm_vars_end-perm_vars call $464f ; _SET_MM_NUM_BYTES call $52ed ; _mm_ldir ld hl,TEXT_MEM ld (hl),' ' ld bc,167 ld de,TEXT_MEM+1 ldir call $4A7E ;_clrLCD ld hl,0 ld ($C00F),hl ;CURSOR_ROW ld (iy+13),6 set 0,(iy+3) ret variable_name: .db 0,7,"phoenix" ;############## Interrupt handler interrupt_code: push af push hl call $0 ; Actual address written over this pop hl in a,(3) ; Bit 1 = ON key status and 1 add a,9 ; A = 10 if ON pressed, 9 if not out (3),a ld a,11 out (3),a ei pop af reti interrupt_code_end: ;############## Simulation of Usgard functions OTH_CLEAR: ld (hl),0 OTH_FILL: ld d,h ld e,l inc de ldir ret OTH_ARROW: ld a,%00111111 out (1),a push ix pop ix in a,(1) or %00001111 ld b,a ld a,%01111110 out (1),a push ix pop ix in a,(1) and b ret INT_INSTALL: ld (interrupt_code+3),hl ld hl,$9000 ld (hl),$91 ld bc,256 call OTH_FILL ld hl,interrupt_code ld de,$9191 ld bc,interrupt_code_end-interrupt_code ldir ld a,$90 ld i,a im 2 ret INT_REMOVE: im 1 ret ;############## GET_KEY replacement GET_KEY: push hl push de push bc ld e,0 ; E = GET_KEY result ld hl,getkeylastdata ; HL = ptr to last read's table ld a,$fe ; A = key port mask ld d,1 ; D = individual key's mask ld c,0 ; C = key number counter gkol: out (1),a ld b,8 push af gkl: inc c in a,(1) and d jr nz,nokey ld a,(hl) and d jr z,nokey ld e,c nokey: rlc d djnz gkl in a,(1) ld (hl),a pop af inc hl rlca cp $7F jr nz,gkol ld a,e pop bc pop de pop hl ret getkeylastdata: .db $ff,$ff,$ff,$ff,$ff,$ff,$ff ;############## CP_HL_DE replacement DO_CP_HL_DE: push hl and a sbc hl,de pop hl ret ;############## D_HL_DECI replacement D_HL_DECI: push bc ld de,up_data+4 ld b,5 ldhld: call UNPACK_HL add a,48 ld (de),a dec de djnz ldhld ld hl,up_data ld b,4 lis: ld a,(hl) cp 48 jr nz,dis ld (hl),32 inc hl djnz lis dis: ld hl,up_data call D_ZT_STR pop bc ret up_data: .db "PAD98",0 ; Because this was coded in 1998! ;############## Custom-font-safe display routines D_ZT_STR: di call _puts ei ret TX_CHARPUT: di call _putc ei ret ;############## Include remainder of game files #include "main16.asm" #include "lib16.asm" #include "lib.asm" #include "title16.asm" #include "disp16.asm" #include "drwspr.asm" #include "player16.asm" #include "shoot.asm" #include "bullets.asm" #include "enemies.asm" #include "init.asm" #include "enemyhit.asm" #include "collide.asm" #include "ebullets.asm" #include "hityou.asm" #include "shop16.asm" #include "helper.asm" #include "eshoot.asm" #include "extlev16.asm" #include "score16.asm" #include "emove.asm" #include "images.asm" #include "levels.asm" #include "data.asm" .end