PAGE SBTTL "--- TIME-STAMP PAGENG ROUTINE ---" ; ------------------------- ; POINT [MPC] TO V-ADDR [I] ; ------------------------- SETWRD: LDA I+LO STA MPCL LDA I+HI STA MPCM LDA #0 STA MPCH ; ZERO TOP BIT JMP VLDMPC ; 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 ; DSKBNK: DB 00 RAMSEC: DB 00 ; WANTED: DB 00,00 ; CURRENT: DB 00 NEXT: DB 00 NSUBA: DB 00 PSUBA: DB 00 NSUBCUR: DB 00 ; YTEMP: DB 00 ATEMP: DB 00 NSUBY: DB 00 ; ; ; GET SIDE 1 LOADS ALL CODE FROM ; DISK SIDE 1 INTO ITS CORRECT ; PLACE ; THE FIRST VPAGE MUST ALREADY BE ; RESIDENT AT [ZBEGIN] GETSIDE1: LDA ZBEGIN+ZLENTH+1 ;GET LENGTH OF GAME (QUADS) STA J+LO LDA ZBEGIN+ZLENTH+0 LDY #5 SLP: LSR A ;CONVERT QUADS TO PAGES WITH /64 ROR J+LO DEY BPL SLP STA J+HI ; [J] HAS # PAGES IN GAME ROUNDED ; DOWN, BUT PAGE 0 IS IN ALREADY ; SO WE NEED ONLY LOAD [J] MORE ; PAGES OR FILL MEM WITH SIDE 1 ; IF THE GAME IS LARGER THAN SIDE 1 ; FILL MAIN AND AUX (NOT RAMDSK) ; # GETDSK ASSUMED TO BE POINTING ; # AT V-PAGE 1 AND RAM PAGE ZBEGIN+1 ; # ALSO, GETDSK SHOULD ROLL INTO ; # AUX RAM WHEN INCMNTING DBUFF FLP: JSR DECJ ;C=0 IF [J] GOES HIGH 0 BCC FIN JSR GETDSK LDA DSKBNK ;IS IT FILLING AUX ? CMP #AUX BNE FLP ;NO LDA DBUFF+HI CMP #PBEGIN ;FILLED TO PAGING BUFFERS YET? BNE FLP ;NO, NOT YET ; NOW PUT STUFF IN RAMDSK LDA #MAIN STA DSKBNK ;POINT BACK TO MAIN MEM LDA #0 STA RAMSEC ;POINT TO FIRST SECTOR LP2: LDA #>IOBUFF STA DBUFF+HI ;MAKE GETDSK LEAVE CODE AT [IOBUFF] JSR DECJ BCC FIN JSR GETDSK LDY #>IOBUFF ;SET UP RAMDSK PARMS LDA RAMSEC LDX #WRITE STA RDBNK+MAIN ;SO WE REALLY JSR RAMDSK JSR RAMDSK ;CALL RAMDSK INC RAMSEC LDA RAMSEC CMP #RMDSIZE BCC LP2 JSR CLS ; CLEAR THE SCREEN FOR NEATNESS LDA #2 STA CV JMP SIDE2 ;CODE EXISTS ON SIDE2 AND WE HAVE SIDE 1 FIN: RTS ;DECJ RETURNS C=0 WHEN J=$FFFF DECJ: LDA J+LO SEC SBC #1 STA J+LO LDA J+HI SBC #0 STA J+HI RTS ; MAKE [MPCPNT],[MPCBNK] POINT TO ; THE RAM PAGE AND BANK THAT HOLDS ; THE V-PAGE MPCH,M ; VLDMPC: LDA MPCH BNE VLD1 ;NOT IN FIRST V-64K LDA MPCM CMP #VAUX ;IS IT A PAGE IN MAIN BCS VLD2 ;NO, IT IS IN AUX ADC #>ZBEGIN ;ADD OFFSET TO GET RAM PAGE LDY #MAIN BEQ VLDEXI ;BRA VLD2: SBC #VAUX-AUXSTART ;FIX TO OFFST INTO AUX RAM LDY #AUX BNE VLDEXI VLD1: CMP #1 ;BETWEEN 64K AND 128K ? BNE VLD3 ;NO, ABOVE 128K LDA MPCM CMP #ZBEGIN ;ADD OFFSET TO GET RAM PAGE LDY #MAIN BEQ VLDZEXI ;BRA VLDZ2: SBC #VAUX-AUXSTART ;FIX TO OFFST INTO AUX RAM LDY #AUX BNE VLDZEXI VLDZ1: CMP #1 ;BETWEEN 64K AND 128K ? BNE VLDZ3 ;NO, ABOVE 128K LDA ZPCM CMP #PSIDE1 ;CHECK IF IN RAMDSK BCC GETYES BNE GETNO CPY #