mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-02-27 09:09:14 +00:00
205 lines
5.6 KiB
NASM
205 lines
5.6 KiB
NASM
PAGE
|
|
SBTTL "--- HARDWARE EQUATES: APPLE II ---"
|
|
|
|
|
|
; -------------------
|
|
; APPLE II MEMORY MAP
|
|
; -------------------
|
|
|
|
|
|
LBUFF EQU $0200 ; LINE INPUT BUFFER (80 BYTES)
|
|
SCREEN EQU $0400 ; START OF SCREEN RAM
|
|
LSTLNE EQU $07D0 ; LAST LINE OF SCREEN RAM
|
|
BORG EQU $0800 ; ORIGIN OF BOOT CODE (EZIP)
|
|
IOBUFF EQU BORG+$100 ; PAGENG BUFFER (EZIP)
|
|
BUFFA EQU IOBUFF+$100 ;($100 BYTES) DECODE BUFFER, LOWER HALF
|
|
BUFFB EQU BUFFA+$100 ;($56 BYTES) SECTOR DECODE BUFFER, UPPER HALF
|
|
|
|
NEXTPNT EQU BUFFB+$100
|
|
PREVPNT EQU NEXTPNT+$80
|
|
VPAGEH EQU PREVPNT+$80
|
|
VPAGEL EQU VPAGEH+$80
|
|
;
|
|
ZSTKBL EQU VPAGEL+$80 ; Z-STACK BOTTOM,LO (1K STACK FOR EZIP)
|
|
ZSTKTL EQU ZSTKBL+$100 ; TOP, LO
|
|
ZSTKBH EQU ZSTKBL+$200 ; BOTTOM, HI
|
|
ZSTKTH EQU ZSTKBL+$300 ; TOP, HI
|
|
LOCALS EQU ZSTKBL+$0400 ; LOCAL VARIABLE STORAGE (30 BYTES)
|
|
BUFSAV EQU LOCALS+$20 ; AUXILIARY INPUT BUFFER (80 BYTES)
|
|
ZBEGIN EQU (((BUFSAV+80)/$100)+1)*$100 ; START OF Z-PRELOAD
|
|
; /$100+1*$100 FORCES TO NEXT PAGE BOUNDRY
|
|
|
|
|
|
|
|
; ---------
|
|
; CONSTANTS
|
|
; ---------
|
|
|
|
EZIPID EQU 2 ; ID BYTE STATING THIS IS AN APPLE EZIP
|
|
|
|
AUX EQU 1
|
|
MAIN EQU 0
|
|
|
|
|
|
|
|
; THE FIRST 98.5K (SIDE1) MUST
|
|
; BE RAM RESIDENT (394=$18A PAGES)
|
|
; 98.5K = $18A PAGES (V$0 TO V$189)
|
|
;
|
|
; PAGES V$13A TO V$189 ARE IN RAMDISK
|
|
; PAGES V$0 TO ($BF-VBEGIN) ARE IN MAIN
|
|
; PAGES ($C0-VBEGIN) TO V$139 ARE IN AUX
|
|
; PAGENG BUFFERS ARE IN AUX FROM
|
|
; V$13A-($C0-VBEGIN)+$08 TO $BF
|
|
|
|
|
|
|
|
VTOTAL EQU 256*4 ;TOTAL # PAGES IN EZIP
|
|
PSIDE2 EQU 35*18 ;# PAGES ON SIDE 2 OF DISK
|
|
PSIDE1 EQU VTOTAL-PSIDE2 ;# PAGES ON DISK SIDE 1
|
|
RMDSIZE EQU $4F ; # PAGES RAMDSK CAN HOLD
|
|
; (SECTORS 0-$4E)
|
|
|
|
AUXSTART EQU $08 ;FIRST RAM PAGE IN AUX MEM
|
|
AUXEND EQU $BF ;LAST PAGE USABLE IN AUXMEM
|
|
MAINSTRT EQU ZBEGIN/$100 ;FIRST FREE PAGE IN MAIN
|
|
MAINEND EQU $BF ;LAST USABLE PAGE IN MAIN
|
|
VAUX EQU MAINEND-MAINSTRT+1 ;FIRST V-PAGE IN AUXMEM
|
|
VRAMDSK EQU PSIDE1-RMDSIZE ;FIRST V-PAGE IN RAMDSK
|
|
|
|
|
|
; PBEGIN IS FIRST RAM PAGENG BUFFER IN AUX MEM
|
|
; PBEGIN IS FIRST PAGENG BUFFER (RAM PAGE IN AUX MEM)
|
|
|
|
PBEGIN EQU VRAMDSK-VAUX+AUXSTART
|
|
NUMBUFS EQU AUXEND-PBEGIN+1 ;# PAGENG BUFFER (RAM PAGES IN AUX)
|
|
;TEMP1 EQU VRAMDSK*$100/$100
|
|
V64PG EQU PBEGIN-<VRAMDSK
|
|
|
|
ARROW EQU $08 ; LEFT ARROW (BACKSPACE)
|
|
EOL EQU $0D ; EOL CHAR
|
|
LF EQU $0A ; LINE FEED
|
|
SPACE EQU $20 ; SPACE CHAR
|
|
BACKSP EQU $7F ; BACKSPACE
|
|
FREAD EQU $84 ;READ BIG FORMAT
|
|
READ EQU $00 ; "READ" COMMAND
|
|
WRITE EQU $01 ; "WRITE" COMMAND
|
|
TOP EQU 1 ; NORMAL TOP EXCLUDING STATUS LINE
|
|
BOTM EQU 24 ; BOTTOM SCREEN LINE
|
|
ZTRKF EQU 03 ; FIRST TRACK GAME IS ON
|
|
ZTRKL EQU 35 ; ANYTHING LOW =35 IS ILLEGAL
|
|
|
|
|
|
; ----------------------
|
|
; BOOT ZERO PAGE EQUATES
|
|
; ----------------------
|
|
|
|
BADDR EQU $26 ; (WORD) ROM BOOT ADDRESS
|
|
BSLOT EQU $2B ; (BYTE) ROM BOOT SLOT
|
|
BSECT EQU $3D ; (BYTE) BOOT SECTOR TO READ
|
|
|
|
|
|
; ----------------
|
|
; HARDWARE EQUATES
|
|
; ----------------
|
|
|
|
KBD EQU $C000 ; KEY STROBE
|
|
ANYKEY EQU $C010 ; ANY KEY DOWN FLAG
|
|
SPKR EQU $C030 ; SPEAKER FLAG (MAKE A NOISE)
|
|
TXTSET EQU $C051 ; SWITCH FOR TEXT MODE
|
|
MIXCLR EQU $C052 ; SWITCH FOR MIX MODE CLEAR
|
|
LOWSCR EQU $C054 ; SWITCH FOR PAGE 1 SELECT
|
|
;
|
|
ALTZP EQU $C008 ;WRITE
|
|
WRTBNK EQU $C004 ;WRITE
|
|
RDBNK EQU $C002 ;WRITE
|
|
BNK2SET EQU $C083 ;READ/READ
|
|
BNK1SET EQU $C08B ;READ/READ
|
|
|
|
|
|
; ------------------------
|
|
; IDOS INTERFACE VARIABLES
|
|
; ------------------------
|
|
|
|
DCBSLT EQU $00 ; (BYTE) TARGET SLOT ID
|
|
DCBPSL EQU DCBSLT+1 ; (BYTE) PREVIOUSLY ACCESSED SLOT
|
|
DCBDRV EQU DCBSLT+2 ; (BYTE) TARGET DRIVE ID
|
|
DCBPDR EQU DCBSLT+3 ; (BYTE) PREVIOUSLY ACCESSED DRIVE
|
|
DCBSEC EQU DCBSLT+4 ; (BYTE) TARGET SECTOR
|
|
DCBTRK EQU DCBSLT+5 ; (BYTE) TARGET TRACK
|
|
DCBERR EQU DCBSLT+6 ; (BYTE) DRIVE ERROR CODE
|
|
DCBCMD EQU DCBSLT+7 ; (BYTE) DISK COMMAND ID
|
|
DCBBFL EQU DCBSLT+8 ; (BYTE) LO POINTER TO DATA BUFFER
|
|
DCBBFM EQU DCBSLT+9 ; (BYTE) HI POINTER TO DATA BUFFER
|
|
DRVFLG EQU DCBSLT+10 ; (BYTE) CURRENT DRIVE
|
|
SLTMP3 EQU DCBSLT+11 ; (BYTE) TRACK-SEEK SLOT
|
|
TTRK EQU DCBSLT+12 ; (BYTE) TARGET TRACK
|
|
DTMP3 EQU DCBSLT+13 ; (BYTE) WORK BYTE
|
|
DTMP4 EQU DCBSLT+14 ; (BYTE) SLOT ID * 16
|
|
HDRCHK EQU DCBSLT+15 ; (BYTE) CHECKSUM FOUND
|
|
HDRSEC EQU DCBSLT+16 ; (BYTE) SECTOR FOUND
|
|
HDRTRK EQU DCBSLT+17 ; (BYTE) TRACK FOUND
|
|
HDRVOL EQU DCBSLT+18 ; (BYTE) VOLUME FOUND
|
|
DCNT EQU DCBSLT+19 ; (BYTE) MOTOR TIME COUNT
|
|
DTMP2 EQU DCBSLT+20 ; (BYTE) TEMP
|
|
|
|
; NEXT 4 FOR 18 SECTORS/TRK CODE IN RWTS
|
|
|
|
HTEMP EQU DCBSLT+21 ; (BYTE)
|
|
TRYS EQU DCBSLT+22 ; (BYTE)
|
|
TEMP EQU DCBSLT+23 ; (BYTE)
|
|
WORD1 EQU DCBSLT+24 ; (WORD)
|
|
DTMP6 EQU DCBSLT+26 ; (BYTE)
|
|
|
|
|
|
; ---------------------
|
|
; DISK HARDWARE EQUATES
|
|
; ---------------------
|
|
|
|
PH0OFF EQU $C080 ; STEP MOTOR POSITION #0
|
|
DRVOFF EQU $C088 ; DRIVE MOTOR OFF
|
|
DRVON EQU $C089 ; DRIVE MOTOR ON
|
|
DRV0EN EQU $C08A ; ENGAGE DRIVE #1
|
|
DRV1EN EQU $C08B ; ENGAGE DRIVE #2
|
|
Q6L EQU $C08C ; READ DATA LATCH
|
|
Q6H EQU $C08D ; WRITE DATA LATCH
|
|
Q7L EQU $C08E ; SET READ MODE
|
|
Q7H EQU $C08F ; SET WRITE MODE
|
|
|
|
|
|
; -----------------
|
|
; MONITOR VARIABLES
|
|
; -----------------
|
|
|
|
WLEFT EQU $20 ; LEFT MARGIN (0)
|
|
WWIDTH EQU $21 ; RIGHT MARGIN (40 OR 80)
|
|
WTOP EQU $22 ; TOP LINE (0-23)
|
|
WBOTM EQU $23 ; BOTTOM LINE (1-24)
|
|
CHZ EQU $24 ; CURSOR HORIZONTAL
|
|
CV EQU $25 ; CURSOR VERTICAL
|
|
BASL EQU $28 ; SCREEN LINE
|
|
INVFLG EQU $32 ; CHAR OUTPUT MASK ($FF=NORM, $3F=INVERSE)
|
|
PROMPT EQU $33 ; PROMPT CHARACTER (SET TO LOW )
|
|
CSW EQU $36 ; CHARACTER OUTPUT VECTOR
|
|
RNUM1 EQU $4E ; RANDOM #'S GENERATED BY
|
|
RNUM2 EQU $4F ; MONITOR GETKEY
|
|
EHZ EQU $057B ; CURSOR HORIZONTAL (IIE/C)
|
|
|
|
|
|
; ----------------
|
|
; MONITOR ROUTINES
|
|
; ----------------
|
|
|
|
BASCAL EQU $FC22 ; CALC LINE BASE ADDRESS
|
|
BELL EQU $FF3A ; MAKE A NOISE
|
|
CLEOL EQU $FC9C ; CLEAR TO END OF LINE
|
|
CLEOS EQU $FC42 ; CLEAR TO END OF SCREEN
|
|
HOME EQU $FC58 ; CLEAR SCREEN/HOME CURSOR
|
|
MCOUT EQU $FDED ; CHAR OUTPUT
|
|
COUT1 EQU $FDF0 ; CHAR OUTPUT TO SCREEN
|
|
RDKEY EQU $FD0C ; READ KEY
|
|
GETLN1 EQU $FD6F ; GET LINE
|
|
MWAIT EQU $FCA8 ; WASTE SO MUCH TIME
|
|
|
|
END
|