Files
Andrew Plotkin b642da811e Initial commit.
2023-11-16 18:19:54 -05:00

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