TITLE 'PROGRAM TO COPY OS ROMS INTO RAM' ; ; Copyright 1986, Charles Marslett and Wordmark Systems ; ; This program will copy the system ROM code into the RAM area below ; the ROMs on an 800XL computer, then it will load the file FASTFP.OBJ ; from drive D2 over the original floating point code. With this and ; the source to the FastChip floating point library you can experiment ; with altered floating point libraries easily. ; CIOV = $E456 XLMAP = $D301 ; OSROMS = $01 NMIEN = $D40E LOWPTR = $FC HIPTR = $FE ; ICMD = $342 IBUF = $344 IAUX = $34A ORG $3000 ;THIS PROGRAM IS LOADED AT 3000-37FF (WATCH ; THE SIZE) START LDA #$C0 STA HIPTR+1 ;COPY FROM C000 LDA #$38 STA LOWPTR+1 ;TO 3800 LDY #0 STY HIPTR ;LOW BYTES OF BOTH POINTERS ARE 00 STY LOWPTR LDX #$CF ;IF WE COPIED CFxx, WE ARE NOW AT I/O PAGE ; LOOP1 LDA (HIPTR),Y STA (LOWPTR),Y ;SAVE 256 BYTES AT A TIME INY BNE LOOP1 CPX HIPTR+1 BNE INCPT1 ;IF DONE WITH C000 PAGE LDA #$D7 STA HIPTR+1 ;CONTINUE AT D800 (SKIP I/O PAGE) INCPT1 INC LOWPTR+1 INC HIPTR+1 ;WHEN WE INCREMENT TO 0000, ALL BNE LOOP1 ;HAS BEEN SAVED, FALL THROUGH ; LDA #$C0 STA HIPTR+1 ;COPYING INTO C000 LDA #$38 STA LOWPTR+1 ;FROM 3800 ; ; DISABLE INT AND NMI UNTIL VECTORS ETC. ARE IN PLACE ; SEI ;INT LDA #0 STA NMIEN ;NMI ; ; DISABLE THE OS ROMS (ENABLE RAM) ; LDA #255-OSROMS AND XLMAP ;ENABLE RAM IN OS AREA STA XLMAP ; ; COPY CODE FROM ROMS BACK UP INTO RAM NOW ENABLED ; LOOP2 LDA (LOWPTR),Y STA (HIPTR),Y ;COPY 256 BYTES PER SMALL LOOP INY BNE LOOP2 CPX HIPTR+1 ;IF DONE WITH C000 PAGE BNE INCPT2 LDA #$D7 STA HIPTR+1 ;STEP OVER I/O PAGE AND RESUME AT D800 INCPT2 INC LOWPTR+1 INC HIPTR+1 BNE LOOP2 ;IF WE HAVE COPIED FFFF, FALL THROUGH ; ; RESTORE NMI AND INT PROCESSING ; LDA #$40 STA NMIEN CLI ; ; THEN LOAD IN NEW FLOATING POINT CODE! ; LDA #39 STA ICMD+$10 LDA #LOW[FPNAME] LDX #HIGH[FPNAME] STA IBUF+$10 ;POINT TO FILE NAME STX IBUF+1+$10 LDA #7 ;NO EXECUTE OR INIT STA IAUX+$10 LDX #$10 ;USE IOCB $10 JMP CIOV ;DO LOAD OF BINARY FILE AND EXIT ; FPNAME DB 'D2:FASTFP.OBJ' ;NEW FLOATING POINT CODE END START