Updated disk image. Builds on Merlin-16 again.

This commit is contained in:
Bobbi Webber-Manners 2021-11-05 19:16:22 -04:00
parent 087c9fc4e1
commit 0d08904fc9
21 changed files with 1831 additions and 1790 deletions

Binary file not shown.

View File

@ -233,6 +233,8 @@ MAINZP MAC

View File

@ -467,3 +467,5 @@ OSWORDM ASC 'OSWORD($'
DB $00
OSBM2 ASC ').'
DB $00

View File

@ -443,3 +443,5 @@ BYTE7DOK RTS
BYTE76 LDX #$00 ; Update LEDs and return X=SHIFT
RTS ; Not possible with Apple

View File

@ -331,3 +331,5 @@ RELCOORD CLC

File diff suppressed because it is too large Load Diff

View File

@ -132,15 +132,15 @@ MOSHIGH SEI
LDA #7
JSR OSWRCH
JSR OSNEWL
LDX MAXROM ; TEMP X=language to enter
LDX MAXROM ; TEMP X=language to enter
CLC
* OSBYTE $8E - Enter language ROM
* X=ROM number to select
*
BYTE8E PHP ; Save CLC=RESET, SEC=Not RESET
JSR ROMSELECT ; Bring ROM X into memory
STX BYTEVARBASE+$FC ; Set current language ROM
JSR ROMSELECT ; Bring ROM X into memory
STX BYTEVARBASE+$FC ; Set current language ROM
LDA #$00
STA FAULT+0
LDA #$80
@ -157,10 +157,10 @@ BYTE8E PHP ; Save CLC=RESET, SEC=Not RESET
* OSBYTE $8F - Issue service call
* X=service call, Y=parameter
*
SERVICE TAX ; Enter here with A=Service Num
SERVICE TAX ; Enter here with A=Service Num
BYTE8F
SERVICEX LDA $F4
PHA ; Save current ROM
PHA ; Save current ROM
* LDA $E0 ; *DEBUG*
* AND #$20
@ -174,22 +174,22 @@ SERVICEX LDA $F4
*:SERVDEBUG
TXA
LDX MAXROM ; Start at highest ROM
:SERVLP JSR ROMSELECT ; Bring it into memory
LDX MAXROM ; Start at highest ROM
:SERVLP JSR ROMSELECT ; Bring it into memory
BIT $8006
BPL :SERVSKIP ; No service entry
JSR $8003 ; Call service entry
BPL :SERVSKIP ; No service entry
JSR $8003 ; Call service entry
TAX
BEQ :SERVDONE
:SERVSKIP LDX $F4 ; Restore X=current ROM
DEX ; Step down to next
BPL :SERVLP ; Loop until ROM 0 done
:SERVDONE PLA ; Get caller's ROM back
PHX ; Save return from service call
:SERVSKIP LDX $F4 ; Restore X=current ROM
DEX ; Step down to next
BPL :SERVLP ; Loop until ROM 0 done
:SERVDONE PLA ; Get caller's ROM back
PHX ; Save return from service call
TAX
JSR ROMSELECT ; Restore caller's ROM
PLX ; Get return value back
TXA ; Return in A and X and set EQ/NE
JSR ROMSELECT ; Restore caller's ROM
PLX ; Get return value back
TXA ; Return in A and X and set EQ/NE
RTS
@ -208,3 +208,5 @@ HELLO ASC 'Applecorn MOS 2021-11-04'
DB $00 ; Unify MOS messages

View File

@ -689,3 +689,5 @@ AUXBLK ASC '**ENDOFCODE**'

View File

@ -17,34 +17,34 @@
* $EF-$FF MOS API workspace
* DEBUG EQU $00 ; $00=*OPT 255 debug code removed
DEBUG EQU $E0 ; $E0=*OPT 255 debug code included
DEBUG EQU $E0 ; $E0=*OPT 255 debug code included
* ; $E1
FSFLAG1 EQU $E2 ; $E2
FSFLAG2 EQU $E3 ; $E3 HOSTFS *OPT settings
GSFLAG EQU $E4 ; $E4 GSREAD processing flags
GSCHAR EQU $E5 ; $E5 GSREAD accumulator
OSTEXT EQU $E6 ; $E6 => text string $E6 OSNUM+0
MAXLEN EQU OSTEXT+2 ; $E8 $E8 OSNUM+2
MINCHAR EQU OSTEXT+3 ; $E9 $E9 OSNUM+3
MAXCHAR EQU OSTEXT+4 ; $EA $EA OSPAD
OSTEMP EQU $EB ; $EB $EB OSTEMP
OSKBD1 EQU $EC ; $EC kbd ws
OSKBD2 EQU OSKBD1+1 ; $ED kbd ws
OSKBD3 EQU OSKBD1+2 ; $EE kbd ws
OSAREG EQU $EF ; $EF A register
OSXREG EQU OSAREG+1 ; $F0 X register
OSYREG EQU OSXREG+1 ; $F1 Y register
OSCTRL EQU OSXREG ; $F0 (XY)=>control block
OSLPTR EQU $F2 ; $F2 => command line
ROMID EQU $F4 ; $F4 current ROM
ROMTMP EQU $F5 ; $F5
ROMPTR EQU $F6 ; $F6 =>
FSFLAG1 EQU $E2 ; $E2
FSFLAG2 EQU $E3 ; $E3 HOSTFS *OPT settings
GSFLAG EQU $E4 ; $E4 GSREAD processing flags
GSCHAR EQU $E5 ; $E5 GSREAD accumulator
OSTEXT EQU $E6 ; $E6 => text string $E6 OSNUM+0
MAXLEN EQU OSTEXT+2 ; $E8 $E8 OSNUM+2
MINCHAR EQU OSTEXT+3 ; $E9 $E9 OSNUM+3
MAXCHAR EQU OSTEXT+4 ; $EA $EA OSPAD
OSTEMP EQU $EB ; $EB $EB OSTEMP
OSKBD1 EQU $EC ; $EC kbd ws
OSKBD2 EQU OSKBD1+1 ; $ED kbd ws
OSKBD3 EQU OSKBD1+2 ; $EE kbd ws
OSAREG EQU $EF ; $EF A register
OSXREG EQU OSAREG+1 ; $F0 X register
OSYREG EQU OSXREG+1 ; $F1 Y register
OSCTRL EQU OSXREG ; $F0 (XY)=>control block
OSLPTR EQU $F2 ; $F2 => command line
ROMID EQU $F4 ; $F4 current ROM
ROMTMP EQU $F5 ; $F5
ROMPTR EQU $F6 ; $F6 =>
* ; $F8 *TEMP* pseudo-SROM settings
* ; $F9 *TEMP* pseudo-SROM settings
OSINTWS EQU $FA ; $FA IRQ ZP pointer, use when IRQs off
OSINTA EQU $FC ; $FC IRQ register A store
FAULT EQU $FD ; $FD Error message pointer
ESCFLAG EQU $FF ; $FF Escape status
OSINTWS EQU $FA ; $FA IRQ ZP pointer, use when IRQs off
OSINTA EQU $FC ; $FC IRQ register A store
FAULT EQU $FD ; $FD Error message pointer
ESCFLAG EQU $FF ; $FF Escape status
* $0200-$0235 Vectors
@ -52,25 +52,27 @@ ESCFLAG EQU $FF ; $FF Escape status
* $0290-$02ED
* $02EE-$02FF MOS control block
USERV EQU $200 ; USER vector
BRKV EQU $202 ; BRK vector
CLIV EQU $208 ; OSCLI vector
BYTEV EQU $20A ; OSBYTE vector
WORDV EQU $20C ; OSWORD vector
WRCHV EQU $20E ; OSWRCH vector
RDCHV EQU $210 ; OSRDCH vector
FILEV EQU $212 ; OSFILE vector
ARGSV EQU $214 ; OSARGS vector
BGETV EQU $216 ; OSBGET vector
BPUTV EQU $218 ; OSBPUT vector
GBPBV EQU $21A ; OSGBPB vector
FINDV EQU $21C ; OSFIND vector
FSCV EQU $21E ; FSCV misc file ops
USERV EQU $200 ; USER vector
BRKV EQU $202 ; BRK vector
CLIV EQU $208 ; OSCLI vector
BYTEV EQU $20A ; OSBYTE vector
WORDV EQU $20C ; OSWORD vector
WRCHV EQU $20E ; OSWRCH vector
RDCHV EQU $210 ; OSRDCH vector
FILEV EQU $212 ; OSFILE vector
ARGSV EQU $214 ; OSARGS vector
BGETV EQU $216 ; OSBGET vector
BPUTV EQU $218 ; OSBPUT vector
GBPBV EQU $21A ; OSGBPB vector
FINDV EQU $21C ; OSFIND vector
FSCV EQU $21E ; FSCV misc file ops
BYTEVARBASE EQU $190 ; Base of OSBYTE variables
OSFILECB EQU $2EE ; OSFILE control block
OSGBPBCB EQU OSFILECB+1 ; OSGBPB control block
BYTEVARBASE EQU $190 ; Base of OSBYTE variables
OSFILECB EQU $2EE ; OSFILE control block
OSGBPBCB EQU OSFILECB+1 ; OSGBPB control block
* $0300-$03DF
* $03E0-$03FF Used for interfacing with ProDOS XFER

View File

@ -513,3 +513,5 @@ ECHOLP1 JSR GSREAD

View File

@ -1008,3 +1008,5 @@ VDU01 RTS

View File

@ -89,6 +89,8 @@ GEOFCMD EQU $D1

View File

@ -228,6 +228,8 @@ MHGRTAB DW $2000,$2080,$2100,$2180,$2200,$2280,$2300,$2380

View File

@ -135,6 +135,8 @@ RESET TSX

View File

@ -16,6 +16,8 @@ START JSR CROUT
LDA #$20 ; PAGE2 shadow on ROM3 GS
TRB $C035
STZ $C073 ; Force RamWorks bank zero
JSR ROMMENU
* LDA #>AUXADDR ; Address in aux
* LDX #<AUXADDR
@ -176,4 +178,6 @@ LOADCODE PHP ; Save carry flag

View File

@ -131,6 +131,8 @@ QUITPL HEX 04 ; Number of parameters

View File

@ -103,3 +103,5 @@ USERSEL DB $00

View File

@ -7,179 +7,181 @@
* A1L/A1H: Start address
* A2L/A2H: End address
* A4L/A4H: Destination start address
MEMCPY LDA (A1L)
STA (A4L)
LDA A1H
CMP A2H
BNE :S1
LDA A1L
CMP A2L
BNE :S1
:DONE RTS
:S1 INC A1L
BNE :S2
INC A1H
:S2 INC A4L
BNE :S3
INC A4H
:S3 BRA MEMCPY
MEMCPY LDA (A1L)
STA (A4L)
LDA A1H
CMP A2H
BNE :S1
LDA A1L
CMP A2L
BNE :S1
:DONE RTS
:S1 INC A1L
BNE :S2
INC A1H
:S2 INC A4L
BNE :S3
INC A4H
:S3 BRA MEMCPY
* Copy 512 bytes from BLKBUF to AUXBLK in aux LC
COPYAUXBLK >>> ALTZP ; Alt ZP & Alt LC on
LDY #$00
STA $C005 ; Write aux mem
:L1 LDA BLKBUF+$000,Y
STA AUXBLK+$000,Y
LDA BLKBUF+$100,Y
STA AUXBLK+$100,Y
INY
BNE :L1
STA $C004 ; Write main mem
:S2 >>> MAINZP ; Alt ZP off, ROM back in
RTS
COPYAUXBLK >>> ALTZP ; Alt ZP & Alt LC on
LDY #$00
STA $C005 ; Write aux mem
:L1 LDA BLKBUF+$000,Y
STA AUXBLK+$000,Y
LDA BLKBUF+$100,Y
STA AUXBLK+$100,Y
INY
BNE :L1
STA $C004 ; Write main mem
:S2 >>> MAINZP ; Alt ZP off, ROM back in
RTS
* Search FILEREFS for value in A
* On return, buffer number is in X (or $FF if no bufs)
FINDBUF LDX #$00
:L1 CMP FILEREFS,X
BEQ :END
INX
CPX #$04
BNE :L1
LDX #$FF ; $FF for not found
:END RTS
FINDBUF LDX #$00
:L1 CMP FILEREFS,X
BEQ :END
INX
CPX #$04
BNE :L1
LDX #$FF ; $FF for not found
:END RTS
* Obtain I/O buffer address
* On entry: buffer number in X
* On exit: buffer address in AY
* Carry set if no bufs, clear otherwise
BUFADDR CPX #$00
BNE :S1
LDA #<IOBUF1
LDY #>IOBUF1
BRA :EXIT
:S1 CPX #$01
BNE :S2
LDA #<IOBUF2
LDY #>IOBUF2
BRA :EXIT
:S2 CPX #$02
BNE :S3
LDA #<IOBUF3
LDY #>IOBUF3
BRA :EXIT
:S3 CPX #$03
BNE :NOBUFS
LDA #<IOBUF4
LDY #>IOBUF4
:EXIT CLC
RTS
:NOBUFS SEC
RTS
BUFADDR CPX #$00
BNE :S1
LDA #<IOBUF1
LDY #>IOBUF1
BRA :EXIT
:S1 CPX #$01
BNE :S2
LDA #<IOBUF2
LDY #>IOBUF2
BRA :EXIT
:S2 CPX #$02
BNE :S3
LDA #<IOBUF3
LDY #>IOBUF3
BRA :EXIT
:S3 CPX #$03
BNE :NOBUFS
LDA #<IOBUF4
LDY #>IOBUF4
:EXIT CLC
RTS
:NOBUFS SEC
RTS
* Check if file exists
* Returns A=0 if doesn't exist, A=1 file, A=2 dir
EXISTS LDA #<MOSFILE
STA GINFOPL+1
LDA #>MOSFILE
STA GINFOPL+2
JSR GETINFO ; GET_FILE_INFO
LDA #$00
BCS :EXIT ; Any error -> $00
LDA GINFOPL+7 ; Storage type
CMP #$0D
LDA #$01 ; File -> $01
ADC #$00 ; Dir. -> $02
:EXIT RTS
EXISTS LDA #<MOSFILE
STA GINFOPL+1
LDA #>MOSFILE
STA GINFOPL+2
JSR GETINFO ; GET_FILE_INFO
LDA #$00
BCS :EXIT ; Any error -> $00
LDA GINFOPL+7 ; Storage type
CMP #$0D
LDA #$01 ; File -> $01
ADC #$00 ; Dir. -> $02
:EXIT RTS
* Copy FILEBLK to OSFILECB in aux memory
* Preserves A
COPYFB PHA
LDX #$11 ; 18 bytes in FILEBLK
>>> WRTAUX ; Write to Aux mem
:L1 LDA FILEBLK,X
STA OSFILECB,X
DEX
BPL :L1
>>> WRTMAIN ; Back to Main mem
PLA
RTS
COPYFB PHA
LDX #$11 ; 18 bytes in FILEBLK
>>> WRTAUX ; Write to Aux mem
:L1 LDA FILEBLK,X
STA OSFILECB,X
DEX
BPL :L1
>>> WRTMAIN ; Back to Main mem
PLA
RTS
* Get file info
GETINFO JSR MLI
DB GINFOCMD
DW GINFOPL
RTS
GETINFO JSR MLI
DB GINFOCMD
DW GINFOPL
RTS
* Set file info
SETINFO LDA #$07 ; SET_FILE_INFO 7 parms
STA GINFOPL
JSR MLI
DB SINFOCMD
DW GINFOPL ; Re-use PL from GFI
LDA #$0A ; GET_FILE_INFO 10 parms
STA GINFOPL
RTS
SETINFO LDA #$07 ; SET_FILE_INFO 7 parms
STA GINFOPL
JSR MLI
DB SINFOCMD
DW GINFOPL ; Re-use PL from GFI
LDA #$0A ; GET_FILE_INFO 10 parms
STA GINFOPL
RTS
* Create disk file
* Uses filename in MOSFILE
CRTFILE JSR MLI ; GET_TIME
DB GTIMECMD
LDA #<MOSFILE
STA CREATEPL+1
LDA #>MOSFILE
STA CREATEPL+2
LDA #$C3 ; Open permissions
STA CREATEPL+3
LDA $BF90 ; Current date
STA CREATEPL+8
LDA $BF91
STA CREATEPL+9
LDA $BF92 ; Current time
STA CREATEPL+10
LDA $BF93
STA CREATEPL+11
JSR MLI
DB CREATCMD
DW CREATEPL
RTS
CRTFILE JSR MLI ; GET_TIME
DB GTIMECMD
LDA #<MOSFILE
STA CREATEPL+1
LDA #>MOSFILE
STA CREATEPL+2
LDA #$C3 ; Open permissions
STA CREATEPL+3
LDA $BF90 ; Current date
STA CREATEPL+8
LDA $BF91
STA CREATEPL+9
LDA $BF92 ; Current time
STA CREATEPL+10
LDA $BF93
STA CREATEPL+11
JSR MLI
DB CREATCMD
DW CREATEPL
RTS
* Open disk file
OPENMOSFILE LDA #<MOSFILE ; Open filename in MOSFILE
STA OPENPL+1
LDA #>MOSFILE
STA OPENPL+2
OPENFILE JSR MLI
DB OPENCMD
DW OPENPL
RTS
OPENMOSFILE LDA #<MOSFILE ; Open filename in MOSFILE
STA OPENPL+1
LDA #>MOSFILE
STA OPENPL+2
OPENFILE JSR MLI
DB OPENCMD
DW OPENPL
RTS
* Close disk file
CLSFILE JSR MLI
DB CLSCMD
DW CLSPL
RTS
CLSFILE JSR MLI
DB CLSCMD
DW CLSPL
RTS
* Read 512 bytes into BLKBUF
RDFILE JSR MLI
DB READCMD
DW READPL
RTS
RDFILE JSR MLI
DB READCMD
DW READPL
RTS
* Write data in BLKBUF to disk
WRTFILE JSR MLI
DB WRITECMD
DW WRITEPL
RTS
WRTFILE JSR MLI
DB WRITECMD
DW WRITEPL
RTS
* Put ProDOS prefix in PREFIX
GETPREF JSR MLI
DB GPFXCMD
DW GPFXPL
RTS
GETPREF JSR MLI
DB GPFXCMD
DW GPFXPL
RTS
* Map of file reference numbers to IOBUF1..4
FILEREFS DB $00,$00,$00,$00
FILEREFS DB $00,$00,$00,$00

View File

@ -314,4 +314,6 @@ PREFIX DS 65 ; Buffer for ProDOS prefix

File diff suppressed because it is too large Load Diff

View File

@ -422,6 +422,8 @@ MATCHBUF DS 65 ; For storing match results (Pascal str)