mirror of
https://github.com/erkyrath/infocom-zcode-terps.git
synced 2026-02-08 09:11:27 +00:00
344 lines
5.5 KiB
NASM
344 lines
5.5 KiB
NASM
PAGE
|
||
STTL "--- COMMODORE 128 MEMORY ACCESS RTNS ---"
|
||
|
||
|
||
ORG SHARED
|
||
|
||
; THIS CODE MUST BE ACCESSIBLE FROM BOTH BANK0 AND BANK1
|
||
; THEREFORE IT WILL BE IN THE "SHARED" SECTION OF MEMORY
|
||
|
||
; ------
|
||
; GETBYT
|
||
; ------
|
||
|
||
GETBYT: LDX MPCBNK ;SELECT CURRENT BANK
|
||
LDA BANK2,X ;ENABLE READ
|
||
STA CR
|
||
LDY MPCL
|
||
LDA (MPCPNT),Y ;GET THE BYTE
|
||
LDX BANK1 ;KILL (FOR SAFTY)
|
||
STX CR
|
||
INC MPCL ;POINT TO NEXT BYTE
|
||
BNE GETGOT ;IF NO CROSS WE ARE STILL VALID
|
||
JSR CRSMPC
|
||
GETGOT: TAY ;SET FLAGS
|
||
RTS ;RED SLIPPER TIME
|
||
|
||
|
||
; ------
|
||
; NEXTPC
|
||
; ------
|
||
|
||
; LIKE GETBYT
|
||
|
||
NEXTPC: LDX ZPCBNK
|
||
LDA BANK2,X
|
||
STA CR
|
||
LDY ZPCL
|
||
LDA (ZPCPNT),Y
|
||
LDX BANK1 ;KILL
|
||
STX CR
|
||
INC ZPCL
|
||
BNE NXTGOT
|
||
JSR CRSZPC
|
||
NXTGOT: TAY
|
||
RTS
|
||
|
||
|
||
; -----------
|
||
; READ SECTOR
|
||
; -----------
|
||
|
||
; NOW HAVE TRACK & SECTOR, READ THE DISK
|
||
|
||
GETRES: CLC ; CARRY CLEAR = "READ BLOCK"
|
||
JSR DISK ; GO DO IT!
|
||
|
||
GOT: LDX DSKBNK ; SET TO PROPER BANK
|
||
LDA BANK2,X
|
||
STA CR
|
||
|
||
LDY #0 ; MOVE CONTENTS OF [IOBUFF]
|
||
GDKL: LDA IOBUFF,Y ; TO THE
|
||
STA (DBUFF),Y ; TARGET PAGE IN [DBUFF]
|
||
INY
|
||
BNE GDKL
|
||
|
||
LDA BANK1 ; RESET TO MAIN BANK
|
||
STA CR
|
||
|
||
INC DBUFF+HI ; POINT TO NEXT PAGE
|
||
LDA DBUFF+HI
|
||
CMP #MAINEND+1 ; PAST LAST MAIN RAM PAGE ?
|
||
BCC GDEX ; NO
|
||
LDA #AUXSTART ; RESET DBUFF TO FIRST AUX PAGE
|
||
STA DBUFF+HI
|
||
LDA #AUX ; SET DSKBNK TO AUX
|
||
STA DSKBNK
|
||
GDEX: JMP NXTDBL ; POINT TO NEXT DBLOCK, SECTOR & TRACK
|
||
|
||
|
||
; -------------
|
||
; KERNAL ACCESS
|
||
; -------------
|
||
|
||
; THESE RTNS WILL SWITCH TO BANK0 WHERE THE KERNAL
|
||
; CAN BE ACCESSED, CALL THE WANTED RTN AND THEN
|
||
; SWITCH BACK TO BANK1 TO RESUME WITH EZIP
|
||
|
||
CHKIN: JSR KSETUP ; SET TO BANK 0
|
||
JSR RCHKIN ; AND CALL KERNAL RTN
|
||
JMP MEMOUT ; THEN SET BACK TO MAIN BANK
|
||
|
||
CHKOUT: JSR KSETUP
|
||
JSR RCHKOUT
|
||
JMP MEMOUT
|
||
|
||
CHRIN: JSR KSETUP
|
||
JSR RCHRIN
|
||
JMP MEMOUT
|
||
|
||
CHROUT: JSR KSETUP
|
||
JSR RCHROUT
|
||
JMP MEMOUT
|
||
|
||
CLALL: JSR KSETUP
|
||
JSR RCLALL
|
||
JMP MEMOUT
|
||
|
||
CLOSE: JSR KSETUP
|
||
JSR RCLOSE
|
||
JMP MEMOUT
|
||
|
||
CLRCHN: JSR KSETUP
|
||
JSR RCLRCHN
|
||
JMP MEMOUT
|
||
|
||
GETIN: JSR KSETUP
|
||
JSR RGETIN
|
||
JMP MEMOUT
|
||
|
||
OPEN: JSR KSETUP
|
||
JSR ROPEN
|
||
JMP MEMOUT
|
||
|
||
PLOT: JSR KSETUP
|
||
JSR RPLOT
|
||
JMP MEMOUT
|
||
|
||
SETLFS: JSR KSETUP
|
||
JSR RSETLFS
|
||
JMP MEMOUT
|
||
|
||
SETNAM: JSR KSETUP
|
||
JSR RSETNAM
|
||
JMP MEMOUT
|
||
|
||
SETFCN: JSR KSETUP
|
||
JSR RSETFCN
|
||
JMP MEMOUT
|
||
|
||
LISTEN: JSR KSETUP
|
||
JSR RLISTEN
|
||
JMP MEMOUT
|
||
|
||
;
|
||
; open talk channel to disk
|
||
; [a] = device number
|
||
; [x] = seconday number
|
||
TALK: JSR KSETUP
|
||
TXA
|
||
PHA
|
||
JSR RTALK
|
||
PLA
|
||
JSR RTKSA
|
||
JMP MEMOUT
|
||
|
||
UNTALK: JSR KSETUP
|
||
JSR RUNTLK
|
||
JMP MEMOUT
|
||
|
||
KSETUP: PHA ; SAVE [A] IN CASE IS NEEDED
|
||
LDA BANK0 ; SET TO BANK0 WHERE CAN ACCESS KERNAL
|
||
STA CR
|
||
PLA
|
||
RTS
|
||
|
||
MEMOUT: PHA
|
||
LDA BANK1
|
||
STA CR
|
||
PLA
|
||
RTS
|
||
|
||
;;
|
||
;; this is the 'get at expansion memory' code, cuz it has to be
|
||
;; slow, and must get at the i/o space too
|
||
;;
|
||
;; [X] - expansion ram bank
|
||
;; [Y] - expansion ram page
|
||
;; [A] - XREAD or XWRITE
|
||
;;
|
||
;; Data is in IOBUFF
|
||
;;
|
||
EXIO:
|
||
JSR KSETUP ; get i/o rom here
|
||
|
||
STX XFLAGS+XBANK ; BANK CURRENTLY WRITING TO
|
||
|
||
LDX #0
|
||
STX FASTER ; make it go slow
|
||
STX XFLAGS+XRAM+LO
|
||
STX XFLAGS+XINT ; NO INTERRUPTS
|
||
STX XFLAGS+XINCR ; INCREMENT ADDR POINTERS
|
||
STX XFLAGS+XSIZ+LO ; AMOUNT TO WRITE IS 1 PG
|
||
|
||
INX ; now make a 1
|
||
STX XFLAGS+XSIZ+HI
|
||
|
||
LDX #>IOBUFF
|
||
STX XFLAGS+XBUFF+HI
|
||
LDX #<IOBUFF
|
||
STX XFLAGS+XBUFF+LO
|
||
|
||
STY XFLAGS+XRAM+HI ; BLOCK IN XRAM
|
||
STA XFLAGS+XFER ; THIS WRITE DOES ACTUAL TRANSFER
|
||
|
||
INC FASTER ; speed me up
|
||
JMP MEMOUT ; and gwon back
|
||
|
||
; THE TWO FILE NAMES CALLED WITH SETNAM, THEY NEED
|
||
; TO BE ACCESSIBLE FROM BANK0 FOR THE CALL
|
||
|
||
I0: DB "I0"
|
||
I0L EQU $-I0
|
||
|
||
POUND: DB "#"
|
||
POUNDL EQU $-POUND
|
||
|
||
|
||
; --------------------------------
|
||
; RETURN RANDOM BYTES IN [A] & [X]
|
||
; --------------------------------
|
||
|
||
RANDOM: LDA BANK0
|
||
STA CR
|
||
INC RAND ; RANDOM FROM APPLE (11/4/86 LD)
|
||
DEC RASTER
|
||
LDA RAND
|
||
ADC RNUM1
|
||
TAX
|
||
LDA RASTER
|
||
SBC RNUM2
|
||
STA RNUM1
|
||
STX RNUM2
|
||
LDY BANK1
|
||
STY CR
|
||
RTS
|
||
|
||
RNUM1: DB 0
|
||
RNUM2: DB 0
|
||
|
||
|
||
BOOP: LDA BANK0
|
||
STA CR
|
||
|
||
LDA #96 ; FREQ LSB
|
||
STA FRELO1
|
||
LDA #22 ; MSB
|
||
STA FREHI1
|
||
LDA #$F2
|
||
STA TIME
|
||
JMP SOUND
|
||
|
||
BEEP: LDA BANK0
|
||
STA CR
|
||
|
||
LDA #60 ; FREQ LSB
|
||
STA FRELO1
|
||
LDA #50 ; MSB
|
||
STA FREHI1
|
||
LDA #$FC
|
||
STA TIME
|
||
|
||
SOUND: LDA #%11110000
|
||
STA SUREL1 ; FULL SUSTAIN
|
||
LDA #%10001111
|
||
STA SIGVOL ; FULL VOLUME
|
||
LDA #%01000001
|
||
STA VCREG1 ; START PULSE
|
||
|
||
RAZZ: LDA TIME
|
||
BNE RAZZ
|
||
|
||
STA VCREG1 ; STOP PULSE
|
||
LDA #%10000000
|
||
STA SIGVOL ; VOLUME OFF
|
||
|
||
LDA BANK1 ; RESET SYSTEM
|
||
STA CR
|
||
RTS
|
||
|
||
|
||
|
||
; WRITE THE CONTROL REGISTER TO $D600 AND THE CHAR TO $D601
|
||
; TO WRITE TO 80 COL CHIP
|
||
; MUST WRITE ADDRESS (MSB, LSB) THEN CHAR. THRU THIS
|
||
; PROCESS, THE ONLY ACCESS POINT IN REGULAR MEMORY
|
||
; IS THRU $D600 & $D601
|
||
|
||
WRTCHR: PHA ; SAVE CHAR TO SEND
|
||
LDA BANK0
|
||
STA CR
|
||
|
||
LDA #$12 ; MSB
|
||
JSR WRTREG
|
||
STX $D601
|
||
LDA #$13 ; LSB OF ADDR
|
||
JSR WRTREG
|
||
STY $D601
|
||
LDA #$1F ; THE CHAR TO WRITE THERE
|
||
JSR WRTREG
|
||
PLA
|
||
STA $D601
|
||
|
||
LDA BANK1 ; RESET SYSTEM
|
||
STA CR
|
||
|
||
RTS
|
||
|
||
WRTREG: STA $D600
|
||
WAIT: BIT $D600
|
||
BPL WAIT
|
||
RTS
|
||
|
||
|
||
; SET BACKGROUND COLOR IN REGISTER 26 BITS 3-0 OF 80 COL CHIP
|
||
|
||
COLOR: STA IOCHAR
|
||
|
||
LDA BANK0
|
||
STA CR
|
||
|
||
LDA #26 ; READ WHAT'S IN THERE NOW
|
||
JSR WRTREG
|
||
LDA $D601
|
||
AND #$F0 ; CLEAR OFF LOW NIBBLE
|
||
ORA IOCHAR ; ADD IN NEW COLOR
|
||
PHA
|
||
LDA #26 ; SET IT UP
|
||
JSR WRTREG
|
||
PLA ; TO PUT NEW COLOR IN
|
||
STA $D601
|
||
|
||
LDA BANK1 ; RESET SYSTEM
|
||
STA CR
|
||
RTS
|
||
|
||
|
||
; DON'T HAVE TO FILL OUT SECTOR TO ALIGN PAGES CAUSE 2500AD
|
||
; CROSS ASSEMBLER DOES THAT TO EXCESS
|
||
|
||
|
||
END
|
||
|
||
|