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 #