diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 703b895a..e48bf7a2 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/A2osX.S.QC.txt b/A2osX.S.QC.txt index 4b2989aa..9e187f73 100644 --- a/A2osX.S.QC.txt +++ b/A2osX.S.QC.txt @@ -21,21 +21,21 @@ A2osX.QC.Start1 sei txs cli - bit RROMBNK1 + bit IO.RROMBNK1 >LDYAI A2osX.QC - >STYA POWERUP - jsr SETPWRC + >STYA ROM.PWREDUP + jsr ROM.SETPWRC lda #$01 - sta MEMTABL+$17 protect ProDOS MLI Page + sta GP.MEMTABL+$17 protect ProDOS MLI Page ldx #$16 -.1 stz MEMTABL,x Reset ProDOS memory bitmap +.1 stz GP.MEMTABL,x Reset ProDOS memory bitmap dex bne .1 lda #$CF protect zero page, stack and page 1 - sta MEMTABL + sta GP.MEMTABL lda #$8C Reset 80 col screen ($0C=FF=HOME) jsr $C300 @@ -164,7 +164,7 @@ A2osX.QC.JMP >DEBUGOA jmp $2000 *-------------------------------------- A2osX.QC.SetPFX jsr MLI - .DA #MLISETPREFIX + .DA #MLI.SETPREFIX .DA MLISETPREFIX03 rts *-------------------------------------- @@ -177,7 +177,7 @@ A2osX.QC.Load >LDYAI MSG.LOAD jsr A2osX.QC.PrintYA jsr MLI - .DA #MLIOPEN + .DA #MLI.OPEN .DA MLIOPEN03 bcs .9 @@ -186,13 +186,13 @@ A2osX.QC.Load >LDYAI MSG.LOAD sta MLICLOSE03+1 jsr MLI - .DA #MLIREAD + .DA #MLI.READ .DA MLIREAD03 php pha jsr MLI - .DA #MLICLOSE + .DA #MLI.CLOSE .DA MLICLOSE03 pla @@ -204,8 +204,8 @@ A2osX.QC.Load >LDYAI MSG.LOAD clc jsr A2osX.QC.PrintYA pla - jsr PRBYTE - jsr CROUT + jsr ROM.PRBYTE + jsr ROM.CROUT sec rts @@ -227,7 +227,7 @@ A2osX.QC.PrintYA .1 lda (TmpPtr1),y ora #$80 - jsr COUT + jsr ROM.COUT iny dex bne .1 @@ -235,7 +235,7 @@ A2osX.QC.PrintYA .9 plp bcc .99 - jsr CROUT + jsr ROM.CROUT .99 rts *-------------------------------------- diff --git a/A2osX.S.txt b/A2osX.S.txt index 5764e9af..ff7ce0aa 100644 --- a/A2osX.S.txt +++ b/A2osX.S.txt @@ -8,7 +8,7 @@ NEW .INB inc/macros.i .INB inc/a2osx.i .INB inc/io.i - .INB inc/monitor.i + .INB inc/rom.ii.i .INB inc/mli.i .INB inc/mli.e.i .INB inc/zp.i @@ -55,15 +55,15 @@ A2osX.Init0 >LDYAI $2000 *-------------------------------------- A2osX.Init1 ldx #$FF init 6502 stack to highest txs - bit RROMBNK1 - jsr HOME + bit IO.RROMBNK1 + jsr ROM.HOME >LDYAI MSG.INIT0 jsr PrintFYA >LDYAI MSG.SYSMEM jsr PrintFYA - lda MACHID + lda GP.MACHID and #MACHID.M cmp #MACHID.M.128 beq A2osX.Init1.128 @@ -72,7 +72,7 @@ A2osX.Init1 ldx #$FF init 6502 stack to highest bra * *-------------------------------------- A2osX.Init1.128 jsr MLI - .DA #MLIGETPREFIX + .DA #MLI.GETPREFIX .DA MLIGETPREFIX01 bcs * @@ -120,10 +120,10 @@ A2osX.Init1.128 jsr MLI .2 >LDYAI MSG.CPU.OK jsr PrintFYA - stz LEVEL Back To FILE LEVEL 0 + stz GP.FLEVEL Back To FILE LEVEL 0 jsr MLI Make sure all files are closed - .DA #MLICLOSE + .DA #MLI.CLOSE .DA MLICLOSE01 bcs * *-------------------------------------- @@ -146,8 +146,8 @@ A2osX.RamDrv >LDYAI MSG.RAMDRV .8 jsr PrintFYA *-------------------------------------- -A2osX.SetupQC lda RRAMWRAMBNK2 - lda RRAMWRAMBNK2 +A2osX.SetupQC lda IO.RRAMWRAMBNK2 + lda IO.RRAMWRAMBNK2 ldx #0 .1 lda A2osX.QC.B.Start,x Still at $2xxx !!! not moved to $1xxx @@ -159,7 +159,7 @@ A2osX.SetupQC lda RRAMWRAMBNK2 inx bne .1 - lda RROMBNK1 + lda IO.RROMBNK1 *-------------------------------------- A2osX.EnumPM >LDYAI MSG.PMENUM do this After SetupQC, a PM could override QC jsr PrintFYA @@ -172,7 +172,7 @@ A2osX.MLIQuit >LDYAI MSG.INIT0OK stz $280 Quit to A2osX jsr MLI - .DA #MLIQUIT + .DA #MLI.QUIT .DA MLIQUIT01 bra * *-------------------------------------- @@ -191,7 +191,7 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME) stx Logo.Filename jsr MLI - .DA #MLIOPEN + .DA #MLI.OPEN .DA MLIOPEN00 bcs .99 @@ -199,7 +199,7 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME) sta MLIREAD00+1 sta MLICLOSE00+1 jsr MLI - .DA #MLIREAD + .DA #MLI.READ .DA MLIREAD00 bcs .98 @@ -207,30 +207,31 @@ A2osX.Screen80 lda #$8C Reset 80 col screen ($0C:HOME) bra A2osX.ScreenDLGR .98 jsr MLI - .DA #MLICLOSE + .DA #MLI.CLOSE .DA MLICLOSE00 .99 rts *-------------------------------------- A2osX.ScreenDLGR lda #20 - sta WNDTOP - sta CV - jsr VTAB + sta ZP.WNDTOP + sta ZP.CV + jsr ROM.VTAB - sta SETALTCHAR - sta CLRHIRES - sta SETMIXED - sta SET80DISP - sta SET80STORE - sta CLRPAGE2 + sta IO.SETALTCHAR + sta IO.CLRHIRES + sta IO.SETMIXED + sta IO.SET80DISP + sta IO.SET80STORE + sta IO.CLRPAGE2 - bit RDIOUDIS - sta SETIOUDIS - sta SETDHIRES + bit IO.RDIOUDIS + sta IO.SETIOUDIS + sta IO.SETDHIRES bmi .10 - sta CLRIOUDIS -.10 sta CLRTEXT + sta IO.CLRIOUDIS + +.10 sta IO.CLRTEXT lda #A2osX.LOGOLOAD+S.BM sta TmpPtr1 @@ -255,7 +256,7 @@ A2osX.ScreenDLGR tax lda PALETTE.AUX,x - sta SETPAGE2 + sta IO.SETPAGE2 sta (TmpPtr2),y pla @@ -265,7 +266,7 @@ A2osX.ScreenDLGR lsr tax lda PALETTE.MAIN,x - sta CLRPAGE2 + sta IO.CLRPAGE2 sta (TmpPtr2),y iny @@ -292,7 +293,7 @@ A2osX.ScreenDLGR asl asl asl - sta SETPAGE2 + sta IO.SETPAGE2 ora (TmpPtr2),y sta (TmpPtr2),y @@ -307,7 +308,7 @@ A2osX.ScreenDLGR asl asl asl - sta CLRPAGE2 + sta IO.CLRPAGE2 ora (TmpPtr2),y sta (TmpPtr2),y @@ -332,17 +333,17 @@ A2osX.ScreenDLGR *-------------------------------------- DisableRamDRV php sei - lda DEVPTRS3D2 - cmp DEVPTRS S0D1=NOVEV + lda GP.DEVPTRS3D2 + cmp GP.DEVPTRS S0D1=NOVEV bne .1 - lda DEVPTRS3D2+1 - cmp DEVPTRS+1 S0D1=NODEV + lda GP.DEVPTRS3D2+1 + cmp GP.DEVPTRS+1 S0D1=NODEV beq .9 S3D2=NODEV, nothing to do -.1 ldx DEVCNT +.1 ldx GP.DEVCNT -.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3 +.2 lda GP.DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3 and #$F3 cmp #$B3 beq .3 @@ -356,26 +357,26 @@ DisableRamDRV php sec rts -.3 cpx DEVCNT +.3 cpx GP.DEVCNT beq .5 -.4 lda DEVLST+1,x - sta DEVLST,x +.4 lda GP.DEVLST+1,x + sta GP.DEVLST,x inx - cpx DEVCNT + cpx GP.DEVCNT bne .4 -.5 ldx DEVCNT - stz DEVLST,x - dec DEVCNT - lda DEVPTRS - sta DEVPTRS3D2 - lda DEVPTRS+1 - sta DEVPTRS3D2+1 +.5 ldx GP.DEVCNT + stz GP.DEVLST,x + dec GP.DEVCNT + lda GP.DEVPTRS + sta GP.DEVPTRS3D2 + lda GP.DEVPTRS+1 + sta GP.DEVPTRS3D2+1 plp jsr MLI - .DA #MLIONLINE + .DA #MLI.ONLINE .DA MLIONLINE01 clc Success!! rts @@ -411,12 +412,12 @@ EnumPM ldx #0 jsr PrintFYA jsr MLI - .DA #MLISETPREFIX + .DA #MLI.SETPREFIX .DA MLISETPREFIX02 bcs .19 jsr MLI - .DA #MLIOPEN + .DA #MLI.OPEN .DA MLIOPEN01 bcc .10 @@ -431,7 +432,7 @@ EnumPM ldx #0 sta MLICLOSE01+1 .2 jsr MLI - .DA #MLIREAD + .DA #MLI.READ .DA MLIREAD01 bcs .98 @@ -496,12 +497,12 @@ EnumPM ldx #0 rts .8 jsr MLI - .DA #MLICLOSE + .DA #MLI.CLOSE .DA MLICLOSE01 bcs .99 jsr MLI - .DA #MLISETPREFIX + .DA #MLI.SETPREFIX .DA MLISETPREFIX01 .99 rts @@ -559,7 +560,7 @@ LoadPM ldy #$1c jsr PrintFYA jsr MLI - .DA #MLIOPEN + .DA #MLI.OPEN .DA MLIOPEN02 bcs .99 @@ -568,7 +569,7 @@ LoadPM ldy #$1c sta MLICLOSE02+1 jsr MLI - .DA #MLIREAD + .DA #MLI.READ .DA MLIREAD02 bcs .98 @@ -583,7 +584,7 @@ LoadPM ldy #$1c rts .9 jsr MLI - .DA #MLICLOSE + .DA #MLI.CLOSE .DA MLICLOSE02 .99 rts *-------------------------------------- diff --git a/BIN/ARC.S.txt b/BIN/ARC.S.txt new file mode 100644 index 00000000..84cdf3a2 --- /dev/null +++ b/BIN/ARC.S.txt @@ -0,0 +1,698 @@ +NEW + AUTO 3,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF bin/arc +*-------------------------------------- + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/kernel.i + .INB inc/arc.i + .INB inc/mli.e.i +*-------------------------------------- +X.ENTER.SUBDIR .EQ 0 +X.COPY.TO.DEST .EQ 0 +X.DELETE.SOURCE .EQ 0 +X.RESET.SRC.DIR .EQ 0 single pass +*-------------------------------------- +DBG .EQ 1 +*-------------------------------------- + .DUMMY + .OR ZPBIN +ZS.START +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 +ZPFileName .BS 2 +ZPFileStat .BS 2 + +ZPFullPath .BS 2 +ZPRelPath .BS 2 + +bAppend .BS 1 +bRecurse .BS 1 +bPause .BS 1 + +ZPAlg .BS 1 + +ZPInBufPtr .BS 2 +ZPOutBufPtr .BS 2 +ZPBackPtr .BS 2 +ZPStrPtr .BS 2 + +ZS.END .ED +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +CS.START cld + jmp (.1,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA 0 + .DA CS.END-CS.START Code Size (without Constants) + .DA DS.END-DS.START Data SegmentSize + .DA #64 Stack Size + .DA #ZS.END-ZS.START Zero Page Size + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.MSG.USAGE .DA MSG.USAGE +L.MSG.DIR .DA MSG.DIR +L.MSG.FILE .DA MSG.FILE +L.MSG.OK .DA MSG.OK +L.MSG.ERR .DA MSG.ERR +L.MSG.E.IARC .DA MSG.E.IARC +L.ARC.Header .DA ARC.Header + .DO DBG +L.MSG.DBG1 .DA MSG.DBG1 +L.MSG.DBG2 .DA MSG.DBG2 +L.MSG.DBG3 .DA MSG.DBG3 + .FIN + .DA 0 +*-------------------------------------- +CS.INIT clc + rts +*-------------------------------------- +CS.RUN >INC.G ArgIndex + >SYSCALL ArgV + bcs .8 + + >STYA ZPPtr1 + + lda (ZPPtr1) + cmp #'-' + bne .4 + + jsr CS.RUN.CheckOpt + bcs .9 + + bne CS.RUN + + >INC.G ArgIndex -X + >SYSCALL ArgV + bcs .9 + + >SYSCALL StrDup + bcs .9 + + txa + >STA.G hIgnore + bra CS.RUN + +.9 >LDYA L.MSG.USAGE + >SYSCALL PutS + lda #E.SYN + sec +.99 rts +*-------------------------------------- +.4 >LDA.G ArcName + bne .5 + + >LDA.G ArgIndex + >STA.G ArcName + bra CS.RUN + +.5 >LDA.G hSrcBasePath + bne .9 + + >LDYA ZPPtr1 + jsr X.InitSrcDirYA + bcc CS.RUN + rts + +.8 >LDA.G ArcName + beq .9 + + >LDA.G hSrcBasePath + beq .9 +*-------------------------------------- + >LDYAI 256 + >SYSCALL GetMem + bcs .99 + + >STYA ZPFullPath + txa + >STA.G hSrcFullPath + + >LDA.G hSrcBasePath + >SYSCALL GetMemPtr + >STYA ZPPtr1 + + ldy #$ff + +.80 iny + lda (ZPPtr1),y + bne .80 + + tya + clc + adc ZPFullPath + sta ZPRelPath + lda ZPFullPath+1 + adc #0 + sta ZPRelPath+1 + + jsr CS.RUN.OpenArc +.98 bcs .99 + + >LDYAI CHNK.SIZE + >SYSCALL GetMem + bcs .98 + + >STYA ZPInBufPtr + txa + >STA.G hSrcBuf + + >LDYAI CHNK.SIZE + >SYSCALL GetMem + bcs .98 + + >STYA ZPOutBufPtr + txa + >STA.G hDstBuf +*-------------------------------------- +CS.RUN.LOOP ldy #S.PS.hStdIn + lda (pPS),y + >SYSCALL FEOF + bcs .99 + + tay + bne .1 + + >SYSCALL GetChar + bcs .99 + + cmp #$03 Ctrl-C + beq .99 Abort.... + + cmp #$13 Ctrl-S + bne .1 + + lda bPause + eor #$ff + sta bPause + bne CS.RUN.LOOP + +.1 lda bPause + bne CS.RUN.LOOP Pause... +*-------------------------------------- + jsr X.GetEntry + bcs .9 + + jsr X.IncludeMatch + bcs .8 no match, skip.... + + jsr X.IgnoreMatch + bcc .8 match, skip + + ldy #S.STAT.MODE+1 + lda (ZPFileStat),y + and #$70 + beq .6 + + cmp /S.STAT.MODE.DIR + bne .8 + + jsr CS.RUN.DIR + bcs .99 + + bra .8 + +.6 jsr CS.RUN.FILE + bcs .99 + + bra .8 + +.9 jsr X.LeaveSubDir + bcs .90 + + jsr X.BasePath.. + +.8 jsr X.GetNextEntry + jmp CS.RUN.LOOP + +.90 lda #0 + sec +.99 rts +*-------------------------------------- +CS.RUN.DEV lda #E.BADPATH + sec + rts +*-------------------------------------- +CS.RUN.DIR lda bRecurse + bpl .8 + + lda (ZPFileName) + cmp #'.' + bne .1 + + ldy #1 + lda (ZPFileName),y + beq .8 + + cmp #'.' + bne .1 + + iny + lda (ZPFileName),y + beq .8 + +.1 jsr CS.RUN.BuildFilePath + + >PUSHW L.MSG.DIR + >PUSHW ZPRelPath + + >PUSHBI 2 + >SYSCALL PrintF + bcs .9 + + jsr CS.RUN.WriteArcHdrDir + bcs .9 + + >LDYA ZPFileName + jsr X.EnterSubDirYA + +.9 jmp CS.RUN.CheckErr + +.8 clc + rts +*-------------------------------------- +CS.RUN.FILE jsr CS.RUN.BuildFilePath + + >PUSHW ZPFullPath + >LDA.G hArcFile + tay + lda FILEs.hName-1,y + >SYSCALL GetMemPtr + >PUSHYA + >SYSCALL StrCmp + bcc .8 + + >PUSHW L.MSG.FILE + >PUSHW ZPRelPath + + >PUSHBI 2 + >SYSCALL PrintF + bcs .9 + + jsr CS.RUN.WriteArcHdrFile + bcs .9 + + jsr CS.RUN.OpenFile + bcs .9 + +.1 lda #'.' + >SYSCALL PutChar + + jsr CS.RUN.ReadFile + bcc .2 + + cmp #MLI.E.EOF + bne .4 + + jsr CS.RUN.CloseFile + + bra .9 + +.2 jsr CS.RUN.Arc + bcs .3 + + jsr CS.RUN.WriteArcData + bcc .1 + + bra .4 + +.3 jsr CS.RUN.WriteSrcData + bcc .1 + +.4 pha + jsr CS.RUN.CloseFile + pla + sec + +.9 jmp CS.RUN.CheckErr + +.8 clc + rts +*-------------------------------------- +CS.RUN.CheckErr bcs .1 + >LDYA L.MSG.OK + >SYSCALL PutS + rts + +.1 pha + >PUSHW L.MSG.ERR + pla + pha + >PUSHA + >PUSHBI 1 + + >SYSCALL PrintF + + pla + sec + rts +*-------------------------------------- +CS.RUN.BuildFilePath + >PUSHW ZPFullPath + >LDA.G hSrcBasePath + >SYSCALL GetMemPtr + >PUSHYA + >SYSCALL StrCpy + + >PUSHW ZPFullPath + >PUSHW ZPFileName + >SYSCALL StrCat + rts +*-------------------------------------- +CS.RUN.OpenFile >PUSHW ZPFullPath + >PUSHBI O.RDONLY + >PUSHBI 0 Type + >PUSHWZ Aux type + >SYSCALL FOpen + bcs .9 + + >STA.G hFile + +.9 rts +*-------------------------------------- +CS.RUN.ReadFile >PUSHB.G hFile + >PUSHW ZPInBufPtr + >PUSHWI CHNK.SIZE + >SYSCALL FRead + bcs .9 + + >STYA.G Shunk.SrcSize + +.9 rts +*-------------------------------------- +CS.RUN.CloseFile + >LDA.G hFile + >SYSCALL FClose + bcs .9 + + >STZ.G hFile + +.9 rts +*-------------------------------------- +CS.RUN.Arc >LDYA.G Shunk.SrcSize + jsr X.Arc + bcs .9 + + stx ZPAlg + >STYA.G Shunk.DstSize + +.9 rts +*-------------------------------------- +CS.RUN.OpenArc >LDA.G ArcName + >SYSCALL ArgV + >PUSHYA + + bit bAppend + bmi CS.RUN.AppendArc + + >PUSHBI O.CREATE+O.WRONLY + >PUSHBI $CF PAK + >PUSHWZ Aux type + + >SYSCALL FOpen + bcs .9 + + >STA.G hArcFile + + >PUSHB.G hArcFile + >PUSHW L.ARC.Header + >SYSCALL FPutS +.9 +CS.RUN.OpenArc.RTS + rts +*-------------------------------------- +CS.RUN.AppendArc + >PUSHBI O.RDWR+O.APPEND + >PUSHBI $CF PAK + >PUSHWZ Aux type + + >SYSCALL FOpen + bcs CS.RUN.OpenArc.RTS + >STA.G hArcFile + + >PUSHB.G hArcFile + >PUSHLZ + >PUSHBI SEEK.SET + >SYSCALL FSeek + bcs CS.RUN.OpenArc.RTS + + >PUSHB.G hArcFile + >PUSHW ZPInBufPtr + >PUSHWI 3 + >SYSCALL FRead + bcs .9 + + cpy #3 + bne .99 + + dey + +.2 lda ARC.Header,y + cmp (ZPInBufPtr),y + bne .99 + + dey + bpl .2 + + >PUSHB.G hArcFile + >PUSHLZ + >PUSHBI SEEK.END + >SYSCALL FSeek +.9 rts + +.99 >LDYA L.MSG.E.IARC + >SYSCALL PutS + lda #E.SYN + sec + rts +*-------------------------------------- +CS.RUN.WriteArcHdrDir + lda #CHNK.T.DIR + jsr CS.RUN.WriteArcByteA + bcc CS.RUN.WriteArcHdr + rts + +CS.RUN.WriteArcHdrFile + lda #CHNK.T.FILE + jsr CS.RUN.WriteArcByteA + bcs CS.RUN.WriteArcHdr.9 + + ldy #S.STAT.P.TYPE + jsr CS.RUN.WriteArcByteY + bcs CS.RUN.WriteArcHdr.9 + + ldy #S.STAT.P.AUXTYPE + jsr CS.RUN.WriteArcByteY + bcs CS.RUN.WriteArcHdr.9 + + ldy #S.STAT.P.AUXTYPE+1 + jsr CS.RUN.WriteArcByteY + bcs CS.RUN.WriteArcHdr.9 + +CS.RUN.WriteArcHdr + ldy #$ff + +.1 iny + lda (ZPRelPath),y + bne .1 + + tya + jsr CS.RUN.WriteArcByteA + bcs CS.RUN.WriteArcHdr.9 + + >PUSHB.G hArcFile + >PUSHW ZPRelPath + >SYSCALL FPutS + +CS.RUN.WriteArcHdr.9 + rts +*-------------------------------------- +CS.RUN.WriteSrcData + lda #CHNK.T.DATA + jsr CS.RUN.WriteArcByteA + bcs .9 + + >LDA.G Shunk.SrcSize + clc + adc #3 + pha + >LDA.G Shunk.SrcSize+1 + adc #0 + sta ZPPtr1+1 + + pla + jsr CS.RUN.WriteArcByteA + bcs .9 + + lda ZPPtr1+1 + jsr CS.RUN.WriteArcByteA + bcs .9 + + lda #0 NO COMPRESSION + jsr CS.RUN.WriteArcByteA + bcs .9 + + >LDA.G Shunk.SrcSize + jsr CS.RUN.WriteArcByteA + bcs .9 + + >LDA.G Shunk.SrcSize+1 + jsr CS.RUN.WriteArcByteA + bcs .9 + + >PUSHB.G hArcFile + >PUSHW ZPInBufPtr + >PUSHW.G Shunk.SrcSize + >SYSCALL FWrite +.9 rts +*-------------------------------------- +CS.RUN.WriteArcData + lda #CHNK.T.DATA + jsr CS.RUN.WriteArcByteA + bcs .9 + + >LDA.G Shunk.DstSize + jsr CS.RUN.WriteArcByteA + bcs .9 + + >LDA.G Shunk.DstSize+1 + jsr CS.RUN.WriteArcByteA + bcs .9 + + >PUSHB.G hArcFile + >PUSHW ZPOutBufPtr + >PUSHW.G Shunk.DstSize + >SYSCALL FWrite +.9 rts +*-------------------------------------- +CS.RUN.WriteArcByteY + lda (ZPFileStat),y + +CS.RUN.WriteArcByteA + pha + >PUSHB.G hArcFile + pla + >PUSHA + >SYSCALL FPutC + rts +*-------------------------------------- +CS.DOEVENT sec + rts +*-------------------------------------- +CS.QUIT jsr X.LeaveSubDir + bcc CS.QUIT + + ldy #hIgnore + jsr .7 + + ldy #hInclude + jsr .7 + + ldy #hSrcFullPath + jsr .7 + + ldy #hDstBuf + jsr .7 + + ldy #hSrcBuf + jsr .7 + + >LDA.G hArcFile + beq .1 + + >SYSCALL FClose + +.1 clc + rts + +.7 lda (pData),y + beq .8 + + >SYSCALL FreeMem + +.8 rts +*-------------------------------------- +CS.RUN.CheckOpt ldy #1 + lda (ZPPtr1),y + + ldx #OptionVars-OptionList-1 + +.1 cmp OptionList,x + beq .2 + + dex + bpl .1 + + sec + rts + +.2 ldy OptionVars,x + beq .8 + + lda #$ff + sta 0,y + +.8 clc + rts +*-------------------------------------- + .INB usr/src/shared/x.fileenum.s + .INB usr/src/shared/x.arc.s +*-------------------------------------- +OptionList .AS "AaRrXx" +OptionVars .DA #bAppend,#bAppend,#bRecurse,#bRecurse,#0,#0 +*-------------------------------------- +MSG.USAGE .CS "Usage : ARC Archive [File *,? wildcards allowed]\r\n" + .CS " -A : Append to archive\r\n" + .CS " -R : Recurse subdirectories\r\n" + .CZ " -X <*,? wildcards allowed> : exclude files \r\n" +MSG.OK .CZ "[OK]" +MSG.ERR .CZ "[%h]\r\n" +MSG.E.IARC .CZ "Invalid/corrupt archive" +MSG.DIR .CZ "Reading Dir:%s..." +MSG.FILE .CZ "Adding File:%s..." +ARC.Header .CZ "ARC" + .DO DBG +MSG.DBG1 .CS "\r\n\r\n ULEN:%6u Bits, T:%6u Bits, BL:%6u Bits, TBL:%6u Bits\r\n" + .CS " TopT :%5d, TopTBL :%5d\r\n" + .CZ " STR.Max :%5d, BLL.Max :%5d, BLO.Max :%5D\r\n" +MSG.DBG2 .CS " S.TB.Cnt :%5D, STR.TB.Cnt:%5D, BL.TB.Cnt :%5D\r\n" + .CS " STR.SL.Cnt:%5D, STR.LL.Cnt:%5D, Bits: %d/%d\r\n" + .CS " BLL.SL.Cnt:%5D, BLL.LL.Cnt:%5D, Bits: %d/%d,%d\r\n" + .CZ " %5D %5D %5D %5D %5D %5D %5D %5D %5D %5D %5D %5D\r\n" +MSG.DBG3 .CZ " Output : %6u Bits, %5D Bytes, Alg=%d\r\n" + .FIN +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +ArgIndex .BS 1 +ArcName .BS 1 +hSrcFullPath .BS 1 + +hFile .BS 1 +hArcFile .BS 1 + +hSrcBuf .BS 1 +hDstBuf .BS 1 + +Shunk.SrcSize .BS 2 +Shunk.DstSize .BS 2 + + .INB usr/src/shared/x.fileenum.g +DS.END + .ED +*-------------------------------------- +MAN +SAVE usr/src/bin/arc.s +ASM diff --git a/BIN/ARCME.S.txt b/BIN/ARCME.S.txt new file mode 100644 index 00000000..cee2c4b5 --- /dev/null +++ b/BIN/ARCME.S.txt @@ -0,0 +1,587 @@ +NEW + AUTO 3,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF bin/arcme +*-------------------------------------- + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/kernel.i + .INB inc/mli.e.i + .INB inc/arc.i +*-------------------------------------- +CHUNK.MAX .EQ 32 +DBG .EQ 1 +*-------------------------------------- + .DUMMY + .OR ZPBIN +ZS.START +ZPSrcFileSize .BS 2 +ZPDstTableOfs .BS 2 +ZPChunkOfs .BS 2 +ZPChunkLen .BS 2 + +hSrcBuf .BS 1 +hDstBuf .BS 1 +bPause .BS 1 +hSrcFile .BS 1 +hDstFile .BS 1 +ZPChunkIndex .BS 1 +ZPChunkCnt .BS 1 +ZPAlg .BS 1 + +ZPChunkPakedLen .BS 2 +ZPChunkNewOfs .BS 2 + +ZPInBufPtr .BS 2 +ZPOutBufPtr .BS 2 +ZPBackPtr .BS 2 +ZPStrPtr .BS 2 + +ZS.END .ED +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +CS.START cld + jmp (.1,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA 0 + .DA CS.END-CS.START Code Size (without Constants) + .DA DS.END-DS.START Data SegmentSize + .DA #64 Stack Size + .DA #ZS.END-ZS.START Zero Page Size + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.MSG.USAGE .DA MSG.USAGE +L.MSG.SRCFILE .DA MSG.SRCFILE +L.MSG.CHUNK .DA MSG.CHUNK +L.MSG.STORED .DA MSG.STORED + .DA MSG.ARCEDT + .DA MSG.ARCEDBL + .DA MSG.ARCEDTBL +L.MSG.ARCED .DA MSG.ARCED +L.MSG.E.IARC .DA MSG.E.IARC +L.TAG .DA TAG + .DO DBG +L.MSG.DBG1 .DA MSG.DBG1 +L.MSG.DBG2 .DA MSG.DBG2 +L.MSG.DBG3 .DA MSG.DBG3 + .FIN + .DA 0 +*-------------------------------------- +CS.INIT clc + rts +*-------------------------------------- +CS.RUN ldy #S.PS.ARGC + lda (pPS),y + + cmp #2 + bne .9 + + jsr CS.RUN.CheckSrcFile + bcs .99 + + lda #2 + >SYSCALL ArgV + >PUSHYA + >PUSHBI O.CREATE+O.WRONLY + >PUSHB.G STATBUF+S.STAT.P.TYPE + >PUSHW.G STATBUF+S.STAT.P.AUXTYPE + + >SYSCALL FOpen + bcs .99 + + sta hDstFile + + bra CS.RUN.START + +.9 >PUSHW L.MSG.USAGE + >PUSHBI 0 + >SYSCALL PrintF + lda #E.SYN + sec +.99 rts +*-------------------------------------- +CS.RUN.START >PUSHW L.MSG.SRCFILE + lda #1 + >SYSCALL ArgV + >PUSHYA + >PUSHW ZPSrcFileSize + >PUSHW.G ARCME.HEADER+5 + >PUSHB.G ARCME.HEADER+7 + >PUSHW ZPDstTableOfs + >PUSHBI 9 + >SYSCALL PrintF + + >LDYA ZPDstTableOfs + jsr CS.RUN.GetSrcBufYA + bcs CS.RUN.RTS + + >PUSHB hSrcFile + >PUSHLZ + >PUSHBI SEEK.SET + >SYSCALL FSeek + bcs CS.RUN.RTS + + >PUSHB hSrcFile + >PUSHW ZPInBufPtr + >PUSHW ZPDstTableOfs + >SYSCALL FRead + bcs CS.RUN.RTS + + >PUSHB hDstFile + >PUSHW ZPInBufPtr + >PUSHW ZPDstTableOfs + >SYSCALL FWrite + bcs CS.RUN.RTS + + jsr CS.QUIT.BUF + + jsr CS.RUN.WriteTable Write Fake table + + bcc CS.RUN.LOOP + +CS.RUN.RTS rts +*-------------------------------------- +CS.RUN.LOOP ldy #S.PS.hStdIn + lda (pPS),y + >SYSCALL FEOF + bcs CS.RUN.RTS + + tay + bne .1 + + >SYSCALL GetChar + bcs CS.RUN.RTS + + cmp #$03 Ctrl-C + beq CS.RUN.RTS Abort.... + + cmp #$13 Ctrl-S + bne .1 + + lda bPause + eor #$ff + sta bPause + bne CS.RUN.LOOP + +.1 lda bPause + bne CS.RUN.LOOP Pause... +*-------------------------------------- + jsr CS.RUN.GetChunk + bcs CS.RUN.RTS + + >PUSHW L.MSG.CHUNK + lda ZPChunkIndex + inc + >PUSHA + >PUSHW ZPChunkOfs + >PUSHW ZPChunkLen + >PUSHBI 5 + >SYSCALL PrintF + bcs .9 + + jsr CS.RUN.Arc + bcs .2 + + jsr CS.RUN.WriteArc + bcc .7 + rts + +.2 jsr CS.RUN.WriteStore + bcs .9 + +.7 jsr CS.QUIT.BUF + + jsr CS.RUN.UpdateTable + inc ZPChunkIndex + dec ZPChunkCnt + beq .8 + + jmp CS.RUN.LOOP + +.8 jsr CS.RUN.RewriteTable Write modified Table + bcs .9 + + lda #0 + sec +.9 rts +*-------------------------------------- +CS.RUN.CheckSrcFile + lda #1 + >SYSCALL ArgV + >PUSHYA + >PUSHBI O.RDONLY + >PUSHBI 0 Type + >PUSHWZ Aux type + + >SYSCALL FOpen + bcs .99 + + sta hSrcFile + + >PUSHB hSrcFile + >PUSHEA.G STATBUF + >SYSCALL FStat +.99 bcs .9 + + >LDA.G STATBUF+S.STAT.SIZE+3 + dey + ora (pData),y + bne .90 + + dey + lda (pData),y + sta ZPSrcFileSize+1 + dey + lda (pData),y + sta ZPSrcFileSize + + jsr CS.RUN.CheckTAG + bcs .9 + + jsr CS.RUN.GetTable + bcs .9 + + + clc + rts + +.90 lda #MLI.E.INCFF + sec +.9 +CS.RUN.CheckSrcFile.RTS + rts +*-------------------------------------- +CS.RUN.CheckTAG >PUSHB hSrcFile + >PUSHWZ + + lda ZPSrcFileSize + sec + sbc #10 + tay + lda ZPSrcFileSize+1 + sbc #0 + >PUSHYA + + >PUSHBI SEEK.SET + >SYSCALL FSeek + bcs CS.RUN.CheckSrcFile.RTS + + >PUSHB hSrcFile + >PUSHEA.G ARCME.HEADER + >PUSHWI 10 + >SYSCALL FRead + bcs CS.RUN.CheckSrcFile.RTS + + ldx #4 + + ldy #ARCME.HEADER+4 + +.1 lda TAG,x + cmp (pData),y + bne .90 + dey + dex + bpl .1 + + clc + rts + +.90 lda #MLI.E.INCFF + sec +.9 rts +*-------------------------------------- +CS.RUN.GetTable >LDA.G ARCME.HEADER+8 + sec + >SBC.G ARCME.HEADER+5 + sta ZPDstTableOfs + + >LDA.G ARCME.HEADER+9 + >SBC.G ARCME.HEADER+6 + sta ZPDstTableOfs+1 + + >PUSHB hSrcFile + >PUSHWZ + >PUSHW ZPDstTableOfs + >PUSHBI SEEK.SET + >SYSCALL FSeek + bcs .9 + + >PUSHB hSrcFile + >PUSHEA.G ARCME.TABLE + >LDA.G ARCME.HEADER+7 + sta ZPChunkCnt + + asl + tay + lda #0 + >PUSHYA + + >SYSCALL FRead + +.9 rts +*-------------------------------------- +CS.RUN.GetChunk lda ZPChunkIndex + + asl + clc + adc #ARCME.TABLE+1 + tay + lda (pData),y + pha + dey + lda (pData),y + sec + ldy #ARCME.HEADER+5 + sbc (pData),y + sta ZPChunkOfs + + iny + pla + sbc (pData),y + sta ZPChunkOfs+1 + + >PUSHB hSrcFile + >PUSHWZ + >PUSHW ZPChunkOfs + >PUSHBI SEEK.SET + >SYSCALL FSeek + bcs .9 + + >PUSHB hSrcFile + >PUSHEA.G CHUNK.HEADER + >PUSHWI S.ARCSHNK.H + >SYSCALL FRead + bcs .9 + + >LDA.G CHUNK.HEADER+2 + iny + ora (pData),y + bne .90 + + >LDA.G CHUNK.HEADER + sta ZPChunkLen + pha + iny + lda (pData),y + sta ZPChunkLen+1 + ply + + jsr CS.RUN.GetSrcBufYA + bcs .9 + + >PUSHB hSrcFile + >PUSHW ZPInBufPtr + >PUSHW ZPChunkLen + >SYSCALL FRead + bcs .9 + +* clc + rts + +.90 lda #MLI.E.INCFF + sec + +.9 rts +*-------------------------------------- +CS.RUN.GetSrcBufYA + >SYSCALL GetMem + bcs .9 + + stx hSrcBuf + >STYA ZPInBufPtr + +.9 rts +*-------------------------------------- +CS.RUN.Arc >LDYA ZPChunkLen + >SYSCALL GetMem + bcs .9 + + stx hDstBuf + >STYA ZPOutBufPtr + + >LDYA ZPChunkLen + jsr X.Arc +* bcs .9 + + stx ZPAlg + >STYA ZPChunkPakedLen +.9 rts +*-------------------------------------- +CS.RUN.RewriteTable + >PUSHB hDstFile + >PUSHWZ + >PUSHW ZPDstTableOfs + >PUSHBI SEEK.SET + >SYSCALL FSeek + bcs CS.RUN.WriteTable.RTS +*-------------------------------------- +CS.RUN.WriteTable + >PUSHB hDstFile + >PUSHEA.G ARCME.TABLE + >LDA.G ARCME.HEADER+7 + asl + tay + lda #0 + >PUSHYA + >SYSCALL FWrite +CS.RUN.WriteTable.RTS + rts +*-------------------------------------- +CS.RUN.WriteArc lda hDstFile + >SYSCALL FTell + bcs .9 + + >PULLW ZPChunkNewOfs + inc pStack + inc pStack + + >PUSHB hDstFile + >PUSHW ZPOutBufPtr + >PUSHW ZPChunkPakedLen + >SYSCALL FWrite + bcs .9 + + >PUSHW L.MSG.ARCED + ldx ZPAlg + >PUSHW L.MSG.STORED,x + >PUSHW ZPChunkPakedLen + >PUSHW ZPChunkNewOfs + >PUSHBI 6 + >SYSCALL PrintF + +.9 +CS.RUN.WriteArc.RTS + rts +*-------------------------------------- +CS.RUN.WriteStore + lda hDstFile + >SYSCALL FTell + bcs CS.RUN.WriteArc.RTS + + >PULLW ZPChunkNewOfs + inc pStack + inc pStack + + >PUSHB hDstFile + >PUSHEA.G CHUNK.HEADER + >PUSHWI S.ARCSHNK.H + >SYSCALL FWrite + bcs .9 + + >PUSHB hDstFile + >PUSHW ZPInBufPtr + >PUSHW ZPChunkLen + >SYSCALL FWrite + bcs .9 + + >PUSHW L.MSG.ARCED + ldx ZPAlg + >PUSHW L.MSG.STORED,x + >PUSHW ZPChunkPakedLen + >PUSHW ZPChunkNewOfs + >PUSHBI 6 + >SYSCALL PrintF + +.9 rts +*-------------------------------------- +CS.RUN.UpdateTable + ldy #ARCME.HEADER+6 + lda (pData),y + pha + + dey + lda (pData),y + pha + + lda ZPChunkIndex + + asl + clc + adc #ARCME.TABLE + tay + + pla + clc + adc ZPChunkNewOfs + sta (pData),y + + iny + + pla + adc ZPChunkNewOfs+1 + sta (pData),y + rts +*-------------------------------------- +CS.DOEVENT sec + rts +*-------------------------------------- +CS.QUIT lda hDstFile + beq .2 + >SYSCALL FClose + +.2 lda hSrcFile + beq CS.QUIT.BUF + + >SYSCALL FClose +*-------------------------------------- +CS.QUIT.BUF lda hDstBuf + beq .1 + + stz hDstBuf + >SYSCALL FreeMem + +.1 lda hSrcBuf + beq .8 + + stz hSrcBuf + >SYSCALL FreeMem + +.8 clc + rts +*-------------------------------------- + .INB usr/src/shared/x.arc.s +*-------------------------------------- +MSG.USAGE .CZ "Usage : ARCME SourceBIN PackedBIN\r\n" +MSG.SRCFILE .CZ "Source File : %s, Size=%5D, Org=$%H, %d Chunks at $%H.\r\n" +MSG.CHUNK .CZ " Chunk #%02d : Ofs=$%H, Len=%5D ... " +MSG.STORED .CZ "Stored " +MSG.ARCEDT .CZ "ARCed/T " +MSG.ARCEDBL .CZ "ARCed/BL " +MSG.ARCEDTBL .CZ "ARCed/TBL" +MSG.ARCED .CZ "%s : %5D Bytes, New Ofs=$%H\r\n" + .CZ %5D Bytes, New Ofs=$%H\r\n" +MSG.E.IARC .CZ "Invalid/corrupt archive" +TAG .CZ "ARCME" + .DO DBG +MSG.DBG1 .CS "\r\n\r\n ULEN:%6u Bits, T:%6u Bits, BL:%6u Bits, TBL:%6u Bits\r\n" + .CS " TopT :%5d, TopTBL :%5d\r\n" + .CZ " STR.Max :%5d, BLL.Max :%5d, BLO.Max :%5D\r\n" +MSG.DBG2 .CS " S.TB.Cnt :%5D, STR.TB.Cnt:%5D, BL.TB.Cnt :%5D\r\n" + .CS " STR.SL.Cnt:%5D, STR.LL.Cnt:%5D, Bits: %d/%d\r\n" + .CS " BLL.SL.Cnt:%5D, BLL.LL.Cnt:%5D, Bits: %d/%d,%d\r\n" + .CZ " %5D %5D %5D %5D %5D %5D %5D %5D %5D %5D %5D %5D\r\n" +MSG.DBG3 .CZ " Output : %6u Bits, %5D Bytes, Alg=%d\r\n" + .FIN +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +STATBUF .BS S.STAT +ARCME.HEADER .BS 10 +ARCME.TABLE .BS CHUNK.MAX*2 +CHUNK.HEADER .BS 4 +DS.END .ED +*-------------------------------------- +MAN +SAVE usr/src/bin/arcme.s +ASM diff --git a/BIN/UNARC.S.txt b/BIN/UNARC.S.txt new file mode 100644 index 00000000..fbeb9efa --- /dev/null +++ b/BIN/UNARC.S.txt @@ -0,0 +1,490 @@ +NEW + AUTO 3,1 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF bin/unarc +*-------------------------------------- + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/mli.e.i + .INB inc/arc.i +*-------------------------------------- + .DUMMY + .OR ZPBIN +ZS.START +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 + +ZPInBufPtr .BS 2 +ZPOutBufPtr .BS 2 + +ZPnCnt .BS 2 +ZPInMask .BS 1 +ZPTOPCnt .BS 1 +ZPSTRLenBits .BS 1 +ZPBLLenBits .BS 1 +ZPBLOfsLBits .BS 1 +ZPBLOfsHBits .BS 1 + +ZPInBufLen .BS 2 +ZPOutBufLen .BS 2 + +ZPFullPathPtr .BS 2 +ZPRelPathPtr .BS 2 + +ZPProgress .BS 1 + +ZS.END .ED +*-------------------------------------- +* File Header (16 Bytes) +*-------------------------------------- +CS.START cld + jmp (.1,x) + .DA #$61 6502,Level 1 (65c02) + .DA #1 BIN Layout Version 1 + .DA 0 + .DA CS.END-CS.START CS + .DA DS.END-DS.START DS + .DA #64 SS + .DA #ZS.END-ZS.START Zero Page Size + .DA 0 +*-------------------------------------- +* Relocation Table +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.MSG.USAGE .DA MSG.USAGE +L.MSG.DIR .DA MSG.DIR +L.MSG.FILE .DA MSG.FILE +L.MSG.OK .DA MSG.OK +L.MSG.E.IARC .DA MSG.E.IARC +L.MSG.SPINNER .DA MSG.SPINNER + .DA 0 +*-------------------------------------- +CS.INIT clc + rts +*-------------------------------------- +CS.RUN stz ZPProgress + >LDYAI CHNK.SIZE + >SYSCALL GetMem + bcc s1 + rts +s1 + >STYA ZPInBufPtr + txa + >STA.G hInBuf + + lda #1 + >SYSCALL ArgV + bcs .99 + + >STYA ZPPtr1 See if first arg is -p + pha + lda (ZPPtr1) + cmp #'-' + bne .1 No dash-arguments + pla + ldy #$01 + lda (ZPPtr1),y + cmp #'p' + bne .99 -p is only valid argument + sty ZPProgress + lda #2 + >SYSCALL ArgV + bcs .99 + bra .11 + +.1 pla +.11 jsr CS.RUN.OpenArc + bcs .9 + + >LDYAI 256 + >SYSCALL GetMem + bcc .15 + rts + +.15 >STYA ZPFullPathPtr + txa + >STA.G hFullPath + + lda ZPProgress See if -p was provided + beq .2 + lda #' ' Space for spinner to eat + >SYSCALL PutChar + lda #3 Have dash-args, check arg #3 + bra .3 +.2 lda #2 No dash-args, check arg #2 +.3 >SYSCALL ArgV + bcc .4 + + ldy #S.PS.hCWD + lda (pPS),y + >SYSCALL GetMemPtr + +.4 jsr CS.RUN.SetupPath + + >LDYAI CHNK.SIZE + >SYSCALL GetMem + bcs .9 + + txa + >STA.G hOutBuf + + jsr CS.RUN.LOOP + bcs .9 + + jsr CS.RUN.TidyUp + lda #0 + sec +.9 rts + +.99 >PUSHW L.MSG.USAGE + >PUSHBI 0 + >SYSCALL PrintF + lda #E.SYN + sec + rts +*-------------------------------------- +CS.RUN.SetupPath + >STYA ZPPtr1 + + ldy #$ff + +.2 iny + lda (ZPPtr1),y + sta (ZPFullPathPtr),y + bne .2 + dey + lda #'/' + cmp (ZPFullPathPtr),y + beq .3 + iny + sta (ZPFullPathPtr),y +.3 tya + sec + adc ZPFullPathPtr + sta ZPRelPathPtr + lda #0 + adc ZPFullPathPtr+1 + sta ZPRelPathPtr+1 + rts +*-------------------------------------- +CS.RUN.LOOP jsr CS.RUN.GetByte + bcs .9 + +.10 cmp #CHNK.T.DIR + bne .1 + + jsr CS.RUN.GetFileName + bcs .99 + + ldx #0 + jsr CS.RUN.PrintFN + + jsr CS.RUN.CheckDir + bcs .99 + + lda ZPProgress + bne CS.RUN.LOOP + >LDYA L.MSG.OK + >SYSCALL PutS + bra CS.RUN.LOOP + +.99 rts + +.9 jmp CS.RUN.E.IARC + +.1 cmp #CHNK.T.FILE + bne .9 + + jsr CS.RUN.GetFileType + bcs .99 + + jsr CS.RUN.GetFileName + bcs .99 + + ldx #2 + jsr CS.RUN.PrintFN + jsr CS.RUN.OpenFile + bcs .99 +*-------------------------------------- + jsr CS.RUN.GetByte DATA + bcs CS.RUN.Exit eof +.2 cmp #CHNK.T.DATA + bne .3 Could be a 0 byte file + +.20 lda ZPProgress + beq .21 + + jsr CS.RUN.Spinner + bra .22 + +.21 lda #'.' + >SYSCALL PutChar + +.22 jsr CS.RUN.GetByte DataLen LO + bcs .99 + + sta ZPInBufLen + + jsr CS.RUN.GetByte DataLen HI + bcs .99 + + sta ZPInBufLen+1 + + jsr CS.RUN.ReadData + bcs .99 + + lda (ZPInBufPtr) ULEN.LO + sta ZPOutBufLen + + ldy #1 + lda (ZPInBufPtr),y ULEN.HI + sta ZPOutBufLen+1 + + >LDA.G hOutBuf + >SYSCALL GetMemPtr + >STYA ZPOutBufPtr + + jsr X.UnArc + bcs .9 + + jsr CS.RUN.WriteFile + bcs .99 + + jsr CS.RUN.GetByte + bcs CS.RUN.Exit + + cmp #CHNK.T.DATA + beq .20 + +.3 pha + jsr CS.RUN.Exit + pla + jmp .10 +*-------------------------------------- +CS.RUN.Exit >LDA.G hFile + >SYSCALL FClose + lda ZPProgress + bne .9 + + >LDYA L.MSG.OK + >SYSCALL PutS +.9 rts +*-------------------------------------- +CS.RUN.PrintFN lda ZPProgress + bne .9 + >PUSHW L.MSG.DIR,x + >PUSHW ZPFullPathPtr + >PUSHBI 2 + >SYSCALL PrintF +.9 rts +*-------------------------------------- +CS.RUN.Spinner lda #8 Backspace + >SYSCALL PutChar + >LDYA L.MSG.SPINNER + >STYA ZPPtr2 + >LDA.G SpinState + tay + lda (ZPPtr2),y + >SYSCALL PutChar + >INC.G SpinState + cmp #4 + bne .9 + >STZ.G SpinState +.9 rts +*-------------------------------------- +CS.RUN.NewLine lda #C.CR + >SYSCALL PutChar + lda #C.LF + >SYSCALL PutChar + rts +*-------------------------------------- +CS.RUN.TidyUp lda ZPProgress + beq .9 + + lda #8 + >SYSCALL PutChar + lda #' ' + >SYSCALL PutChar + jsr CS.RUN.NewLine +.9 rts +*-------------------------------------- +CS.RUN.OpenArc >PUSHYA + >PUSHBI O.RDONLY + >PUSHBI $CF PAK + >PUSHWZ Aux type + >SYSCALL FOpen + bcs .9 + + >STA.G hArcFile + >PUSHA + >PUSHW ZPInBufPtr + >PUSHWI 3 + >SYSCALL FRead + bcs .9 + + cpy #3 + bne .99 + + dey +.1 lda MSG.ARC,y + cmp (ZPInBufPtr),y + bne .99 + + dey + bpl .1 + + clc +.9 rts + +.99 +CS.RUN.E.IARC >PUSHW L.MSG.E.IARC + >PUSHBI 0 + >SYSCALL PrintF + lda #E.SYN + sec + rts +*-------------------------------------- +CS.RUN.GetFileType + >PUSHB.G hArcFile + >PUSHEA.G FileType + >PUSHWI 3 + >SYSCALL FRead + rts +*-------------------------------------- +CS.RUN.GetFileName + jsr CS.RUN.GetByte + bcs .9 + pha + + >PUSHB.G hArcFile + >PUSHW ZPRelPathPtr + + ply + lda #0 + >PUSHYA + >SYSCALL FRead + bcs .9 + + lda #0 + sta (ZPRelPathPtr),y + +* clc +.9 rts +*-------------------------------------- +CS.RUN.ReadData >PUSHB.G hArcFile + >LDA.G hInBuf + >SYSCALL GetMemPtr + >STYA ZPInBufPtr + >PUSHYA + >PUSHW ZPInBufLen + >SYSCALL FRead + rts +*-------------------------------------- +CS.RUN.GetByte >LDA.G hArcFile + >SYSCALL GetC + rts +*-------------------------------------- +CS.RUN.CheckDir >PUSHW ZPFullPathPtr + >PUSHEA.G STAT + >SYSCALL Stat + bcc .1 + + >PUSHW ZPFullPathPtr + >PUSHWI S.STAT.MODE.FO+S.STAT.MODE.FG+S.STAT.MODE.FU + >SYSCALL MKDir + + rts + +.1 ldy #STAT+S.STAT.MODE+1 + lda (pData),y + and #$F0 + cmp /S.STAT.MODE.DIR + bne .99 + + clc + rts + +.99 lda #MLI.E.INVPATH + sec +.9 rts +*-------------------------------------- +CS.RUN.OpenFile >PUSHW ZPFullPathPtr + >PUSHBI O.CREATE+O.WRONLY+O.TRUNC + >PUSHB.G FileType + >PUSHW.G FileAuxType + >SYSCALL FOpen + bcs .9 + >STA.G hFile +.9 rts +*-------------------------------------- +CS.RUN.WriteFile + >PUSHB.G hFile + >LDA.G hOutBuf + >SYSCALL GetMemPtr + >PUSHYA + >PUSHW ZPOutBufLen + >SYSCALL FWrite + rts +*-------------------------------------- +CS.DOEVENT sec + rts +*-------------------------------------- +CS.QUIT >LDA.G hFile + beq .1 + >SYSCALL FClose + +.1 >LDA.G hFullPath + beq .2 + + >SYSCALL FreeMem +.2 >LDA.G hOutBuf + beq .3 + + >SYSCALL FreeMem +.3 >LDA.G hInBuf + beq .4 + + >SYSCALL FreeMem + +.4 >LDA.G hArcFile + beq .8 + >SYSCALL FClose + +.8 clc + rts +*-------------------------------------- + .INB usr/src/shared/x.unarc.s +*-------------------------------------- +CS.END +MSG.USAGE .CS "Usage : UNARC [-p] Archive [DstDir]\r\n" + .CZ " -p: Show progress spinner\r\n" +MSG.DIR .CZ "Creating Dir:%s..." +MSG.FILE .CZ "Extracting File:%s..." +MSG.OK .CZ "[OK]" +MSG.E.IARC .CZ "\r\nInvalid/corrupt archive" +MSG.ARC .CS "ARC" +MSG.SPINNER .CS "|/-\" +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +hArcFile .BS 1 +hFullPath .BS 1 +hInBuf .BS 1 +hOutBuf .BS 1 +hFile .BS 1 +FileType .BS 1 +FileAuxType .BS 2 +SpinState .BS 1 +STAT .BS S.STAT +DS.END + .ED +*-------------------------------------- +MAN +SAVE usr/src/bin/unarc.s +ASM diff --git a/DRV/DHGR.DRV.S.LINE.txt b/DRV/DHGR.DRV.S.LINE.txt index 92b23364..98216218 100644 --- a/DRV/DHGR.DRV.S.LINE.txt +++ b/DRV/DHGR.DRV.S.LINE.txt @@ -135,7 +135,7 @@ VLINE.MONO.XOR bcc .1 rts - +*-------------------------------------- VLINE.C16 lda CB.Cache+S.CB.X1 lsr CB.Cache+S.CB.X1+1 divide by 4 ror diff --git a/DRV/DHGR.DRV.S.OSD.txt b/DRV/DHGR.DRV.S.OSD.txt index a8809e36..446c0a9d 100644 --- a/DRV/DHGR.DRV.S.OSD.txt +++ b/DRV/DHGR.DRV.S.OSD.txt @@ -789,7 +789,10 @@ SHIFT8.L7 .DA #%00000000,#%10000000,#%00000001,#%10000001,#%00000010,#%10000010 .DA #%00110100,#%10110100,#%00110101,#%10110101,#%00110110,#%10110110,#%00110111,#%10110111 .DA #%00111000,#%10111000,#%00111001,#%10111001,#%00111010,#%10111010,#%00111011,#%10111011 .DA #%00111100,#%10111100,#%00111101,#%10111101,#%00111110,#%10111110,#%00111111,#%10111111 +*-------------------------------------- + .LIST ON X.OSD.LEN .EQ *-X.OSD + .LIST OFF *-------------------------------------- MAN SAVE usr/src/drv/dhgr.drv.s.osd diff --git a/DRV/DHGR.DRV.S.PIX.txt b/DRV/DHGR.DRV.S.PIX.txt index 916a812d..64e547f7 100644 --- a/DRV/DHGR.DRV.S.PIX.txt +++ b/DRV/DHGR.DRV.S.PIX.txt @@ -58,7 +58,7 @@ SETPIXEL.MONO.XOR eor Mono.Masks,x sta (ZPBasePtr) rts - +*-------------------------------------- SETPIXEL.C16 lda CB.Cache+S.CB.X1 lsr CB.Cache+S.CB.X1+1 divide by 4 ror @@ -67,9 +67,9 @@ SETPIXEL.C16 lda CB.Cache+S.CB.X1 tay Y=X/4 (range 0->139) ldx CB.Cache+S.CB.Y1 - +*-------------------------------------- * Y = PixelX (0,139), X = PixelY (0,191) - +*-------------------------------------- SETPIXEL.C16.YX lda DIV7.0,y PixelX MOD 7 (range 0->19) asl times 2 (range 0->38) * clc diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index ae0f1925..41a7b200 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -628,6 +628,8 @@ BM.Cache .BS S.BM *-------------------------------------- LBUF.MASK .BS 81 81 because of sta LBUF.DATA+1,x!!! LBUF.DATA .BS 81 +*LBUF.MASK .EQ $240 +*LBUF.DATA .EQ $2A0 *-------------------------------------- DIB .DA #0 .DA #0,#0,#0 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 0f27c94d..5400d5b1 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -39,8 +39,9 @@ A2osX.SLEEP .EQ $1010 *-------------------------------------- A2osX.SCRNDEVS .EQ $11D0 0=console, 1-8=VT100, 9=GFX A2osX.ASCREEN .EQ $11DA Active Screen - -A2osX.KVER .EQ $11E0 +* 5 bytes +A2osX.KVER .EQ $11E0 WORD +* 1 byte A2osX.IRQMode .EQ $11E3 A2osX.ATLKSID .EQ $11E4 A2osX.FSID .EQ $11E5 diff --git a/INC/ARC.I.txt b/INC/ARC.I.txt new file mode 100644 index 00000000..fb7d1736 --- /dev/null +++ b/INC/ARC.I.txt @@ -0,0 +1,86 @@ +NEW + AUTO 3,1 + .LIST OFF +*-------------------------------------- +STR.MIN .EQ 3 +STR.MID .EQ STR.MIN+7+1 +STR.MAX .EQ STR.MID+63 +*-------------------------------------- +BLL.MIN .EQ 3 +BLL.MID .EQ BLL.MIN+3+1 +BLL.MAX .EQ BLL.MID+63 +*-------------------------------------- +BLO.WINDOW.W .EQ 12 +BLO.WINDOW .EQ 4095 +*-------------------------------------- +ARC.B.PREFIX.W .EQ 1 +ARC.B.SINGLE .EQ %0 +bbbb.bbbb +ARC.B.STRBL .EQ %1 +*-------------------------------------- +ARC.B.RAWTOP.W .EQ 1 +ARC.B.RAW .EQ %0 +bbbb.bbbb +ARC.B.TOP .EQ %1 +*-------------------------------------- +ARC.B.STRBL.W .EQ 1 +ARC.B.STR .EQ %0 +llll... +ARC.B.BL .EQ %1 +llll... +oooooooooo... +*-------------------------------------- +ARC.B.LEN.W .EQ 1 +ARC.B.SHORT.B .EQ %0 +ARC.B.LONG.B .EQ %1 +*-------------------------------------- +ARC.B.SHORTSTR.W .EQ 3 +ARC.B.SHORTBLL.W .EQ 2 +*-------------------------------------- +TOP.MIN.CNT .EQ 3 +TOP.MAX .EQ 32 +*-------------------------------------- +ARC.B.TOP0.W .EQ 4 +ARC.B.TOP0.B .EQ %0.000 +ARC.B.TOP0.M .EQ %0.111 + +ARC.B.TOP8.W .EQ 5 +ARC.B.TOP8.B .EQ %10.000 +ARC.B.TOP8.M .EQ %00.111 + +ARC.B.TOP16.W .EQ 6 +ARC.B.TOP16.B .EQ %11.0000 +ARC.B.TOP16.M .EQ %00.1111 +*-------------------------------------- +* Shunk Header +* ULEN (16) : Target Uncompressed Length +* !!! USED TO STOP UNPACK,NO EOF TOKEN !!! +* TBLBITS (16) : sss.ccccc c.lll.oooo +* sss : bitcnt for long STR len, max = 7 bits:127+STR.MID +* cccccc : top count, 0-> 63 +* lll : bitcnt for long BL len, max = 7 bits:127+BL.MID +* oooo : bitcnt for long BL ofs, max = 15 bits:32767 +*-------------------------------------- +S.ARCSHNK.ULEN .EQ 0 Uncompressed length +S.ARCSHNK.TBLBITS .EQ 2 +S.ARCSHNK.TOPBYTES .EQ 4 if cccccc > 0 +* +S.ARCSHNK.H .EQ 4 +* TOP Bytes ... +S.ARCSHNK .EQ S.ARCSHNK.H+TOP.MAX +* DATA ... +*-------------------------------------- +CHNK.SIZE .EQ 4096 +*-------------------------------------- +CHNK.T .EQ 0 +CHNK.T.DIR .EQ 1 +CHNK.T.FILE .EQ 2 +CHNK.T.DATA .EQ 128 +* +CHNK.FILE.TYPE .EQ 1 +CHNK.FILE.AUXT .EQ 2 +CHNK.FILE.FNLEN .EQ 4 +* +CHNK.DIR.FNLEN .EQ 1 +* +CHNK.DATA.LEN .EQ 1 +*-------------------------------------- +MAN +SAVE inc/arc.i +LOAD usr/src/bin/arcme.s +ASM diff --git a/INC/IO.I.txt b/INC/IO.I.txt index 59139607..ec22e584 100644 --- a/INC/IO.I.txt +++ b/INC/IO.I.txt @@ -4,94 +4,93 @@ NEW *-------------------------------------- * Software Switches *-------------------------------------- -KBD .EQ $C000 R -CLR80STORE .EQ $C000 W -SET80STORE .EQ $C001 W -CLRREADAUX .EQ $C002 W -SETREADAUX .EQ $C003 W -CLRWRITEAUX .EQ $C004 W -SETWRITEAUX .EQ $C005 W -CLRCXROM .EQ $C006 W -SETCXROM .EQ $C007 W -CLRALTZP .EQ $C008 W -SETALTZP .EQ $C009 W -CLRC3ROM .EQ $C00A W -SETC3ROM .EQ $C00B W -CLR80DISP .EQ $C00C W -SET80DISP .EQ $C00D W -CLRALTCHAR .EQ $C00E W -SETALTCHAR .EQ $C00F W -KBDSTROBE .EQ $C010 W -RDLCBNK2 .EQ $C011 R -RDLCRAM .EQ $C012 R -RDREADAUX .EQ $C013 R -RDWRITEAUX .EQ $C014 R -RDCXROM .EQ $C015 R -RDALTZP .EQ $C016 R -RDC3ROM .EQ $C017 R -RD80STORE .EQ $C018 R -VBL .EQ $C019 R -RDTEXT .EQ $C01A R -RDMIXED .EQ $C01B R -RDPAGE2 .EQ $C01C R -RDHIRES .EQ $C01D R -RDALTCHAR .EQ $C01E R -RD80DISP .EQ $C01F R -*TAPEOUT .EQ $C020 W -newvideo .EQ $C029 video mode select -SPEAKER .EQ $C030 W, toggle speaker diaphragm -*STROBE .EQ $C040 R, generate .5 uS low pulse @ Game pin 5 -*RDVBLIIC .EQ $C05A R, VBL switch Status (IIc) +IO.KBD .EQ $C000 R +IO.CLR80STORE .EQ $C000 W +IO.SET80STORE .EQ $C001 W +IO.CLRREADAUX .EQ $C002 W +IO.SETREADAUX .EQ $C003 W +IO.CLRWRITEAUX .EQ $C004 W +IO.SETWRITEAUX .EQ $C005 W +IO.CLRCXROM .EQ $C006 W +IO.SETCXROM .EQ $C007 W +IO.CLRALTZP .EQ $C008 W +IO.SETALTZP .EQ $C009 W +IO.CLRC3ROM .EQ $C00A W +IO.SETC3ROM .EQ $C00B W +IO.CLR80DISP .EQ $C00C W +IO.SET80DISP .EQ $C00D W +IO.CLRALTCHAR .EQ $C00E W +IO.SETALTCHAR .EQ $C00F W +IO.KBDSTROBE .EQ $C010 W +IO.RDLCBNK2 .EQ $C011 R +IO.RDLCRAM .EQ $C012 R +IO.RDREADAUX .EQ $C013 R +IO.RDWRITEAUX .EQ $C014 R +IO.RDCXROM .EQ $C015 R +IO.RDALTZP .EQ $C016 R +IO.RDC3ROM .EQ $C017 R +IO.RD80STORE .EQ $C018 R +IO.VBL .EQ $C019 R +IO.RDTEXT .EQ $C01A R +IO.RDMIXED .EQ $C01B R +IO.RDPAGE2 .EQ $C01C R +IO.RDHIRES .EQ $C01D R +IO.RDALTCHAR .EQ $C01E R +IO.RD80DISP .EQ $C01F R +*IO.TAPEOUT .EQ $C020 W +IO.SPEAKER .EQ $C030 W, toggle speaker diaphragm +*IO.STROBE .EQ $C040 R, generate .5 uS low pulse @ Game pin 5 +*IO.RDVBLIIC .EQ $C05A R, VBL switch Status (IIc) + +*IO.EMUBYTE .EQ $C04F WRR, Write once then Read EMUL, Read Version + +IO.CLRTEXT .EQ $C050 W +IO.SETTEXT .EQ $C051 W +IO.CLRMIXED .EQ $C052 W +IO.SETMIXED .EQ $C053 W +IO.CLRPAGE2 .EQ $C054 W +IO.SETPAGE2 .EQ $C055 W +IO.CLRHIRES .EQ $C056 W +IO.SETHIRES .EQ $C057 W -*EMUBYTE .EQ $C04F WRR, Write once then Read EMUL, Read Version +*IO.SETAN0 .EQ $C058 W, Set annunciator-0 output to 0 +*IO.CLRAN0 .EQ $C059 W, Set annunciator-0 output to 1 +*IO.SETAN1 .EQ $C05A W, Set annunciator-1 output to 0 +*IO.CLRAN1 .EQ $C05B W, Set annunciator-1 output to 1 +*IO.SETAN2 .EQ $C05C W, Set annunciator-2 output to 0 +*IO.CLRAN2 .EQ $C05D W, Set annunciator-2 output to 1 +IO.SETAN3 .EQ $C05E W, Set annunciator-3 output to 0 +IO.CLRAN3 .EQ $C05F W, Set annunciator-3 output to 1 + +IO.SETDHIRES .EQ $C05E W, if IOUDIS Set, turn on double-hires +IO.CLRDHIRES .EQ $C05F W, if IOUDIS Set, turn off double-hires + +*IO.TAPEIN .EQ $C060 R + +IO.OPENAPPLE .EQ $C061 R +IO.SOLIDAPPLE .EQ $C062 R +*IO.PB2 .EQ $C063 R -CLRTEXT .EQ $C050 W -SETTEXT .EQ $C051 W -CLRMIXED .EQ $C052 W -SETMIXED .EQ $C053 W -CLRPAGE2 .EQ $C054 W -SETPAGE2 .EQ $C055 W -CLRHIRES .EQ $C056 W -SETHIRES .EQ $C057 W +*IO.PADDLE0 .EQ $C064 R, bit 7 = status of pdl-0 timer +*IO.PADDLE1 .EQ $C065 R, bit 7 = status of pdl-1 timer +*IO.PADDLE2 .EQ $C066 R, bit 7 = status of pdl-2 timer +*IO.PADDLE3 .EQ $C067 R, bit 7 = status of pdl-3 timer -*SETAN0 .EQ $C058 W, Set annunciator-0 output to 0 -*CLRAN0 .EQ $C059 W, Set annunciator-0 output to 1 -*SETAN1 .EQ $C05A W, Set annunciator-1 output to 0 -*CLRAN1 .EQ $C05B W, Set annunciator-1 output to 1 -*SETAN2 .EQ $C05C W, Set annunciator-2 output to 0 -*CLRAN2 .EQ $C05D W, Set annunciator-2 output to 1 -SETAN3 .EQ $C05E W, Set annunciator-3 output to 0 -CLRAN3 .EQ $C05F W, Set annunciator-3 output to 1 +*IO.PDLTRIG .EQ $C070 W, trigger paddles -SETDHIRES .EQ $C05E W, if IOUDIS Set, turn on double-hires -CLRDHIRES .EQ $C05F W, if IOUDIS Set, turn off double-hires - -*TAPEIN .EQ $C060 R - -OPENAPPLE .EQ $C061 R -SOLIDAPPLE .EQ $C062 R -*PB2 .EQ $C063 R - -*PADDLE0 .EQ $C064 R, bit 7 = status of pdl-0 timer -*PADDLE1 .EQ $C065 R, bit 7 = status of pdl-1 timer -*PADDLE2 .EQ $C066 R, bit 7 = status of pdl-2 timer -*PADDLE3 .EQ $C067 R, bit 7 = status of pdl-3 timer -statereg .EQ $C068 memory state register -*PDLTRIG .EQ $C070 W, trigger paddles - -SETIOUDIS .EQ $C07E W, enable DHIRES & disable $C058-5F -RDIOUDIS .EQ $C07E R, bit 7 = IOUDIS status -CLRIOUDIS .EQ $C07F W, disable DHIRES & enable $C058-5F +IO.SETIOUDIS .EQ $C07E W, enable DHIRES & disable $C058-5F +IO.RDIOUDIS .EQ $C07E R, bit 7 = IOUDIS status +IO.CLRIOUDIS .EQ $C07F W, disable DHIRES & enable $C058-5F *-------------------------------------- -*RRAMBNK2 .EQ $C080 R -RROMWRAMBNK2 .EQ $C081 RR -RROMBNK2 .EQ $C082 R -RRAMWRAMBNK2 .EQ $C083 RR -*RRAMBNK1 .EQ $C088 R -*RROMWRAMBNK1 .EQ $C089 RR -RROMBNK1 .EQ $C08A R -RRAMWRAMBNK1 .EQ $C08B RR +*IO.RRAMBNK2 .EQ $C080 R +IO.RROMWRAMBNK2 .EQ $C081 RR +IO.RROMBNK2 .EQ $C082 R +IO.RRAMWRAMBNK2 .EQ $C083 RR +*IO.RRAMBNK1 .EQ $C088 R +*IO.RROMWRAMBNK1 .EQ $C089 RR +IO.RROMBNK1 .EQ $C08A R +IO.RRAMWRAMBNK1 .EQ $C08B RR *-------------------------------------- -CLRC8ROM .EQ $CFFF R, Release C800-CFFF Rom Space for all cards +IO.CLRC8ROM .EQ $CFFF R, Release C800-CFFF Rom Space for all cards MAN -SAVE INC/IO.I +SAVE inc/io.i diff --git a/INC/IO.IIGS.I.txt b/INC/IO.IIGS.I.txt index a101589e..08cb15cf 100644 --- a/INC/IO.IIGS.I.txt +++ b/INC/IO.IIGS.I.txt @@ -2,9 +2,11 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- -IO.IIGS.INTEN .EQ $C041 R,W -IO.IIGS.INTFLAG .EQ $C046 R -IO.IIGS.CLRVBLINT .EQ $C047 W +IO.GS.NEWVIDEO .EQ $C029 R,W video mode select +IO.GS.INTEN .EQ $C041 R,W +IO.GS.INTFLAG .EQ $C046 R +IO.GS.CLRVBLINT .EQ $C047 W +IO.GS.STATEREG .EQ $C068 R,W memory state register *-------------------------------------- .MA TKCALL ldx ##TK.]1 diff --git a/INC/MACROS.I.txt b/INC/MACROS.I.txt index 5040c73b..50f3c860 100644 --- a/INC/MACROS.I.txt +++ b/INC/MACROS.I.txt @@ -38,89 +38,89 @@ NEW *-------------------------------------- .MA MLICALL ldx #]1 - .DO ]1=MLIALLOCIRQ + .DO ]1=MLI.ALLOCIRQ lda #2 .FIN - .DO ]1=MLIDEALLOCIRQ + .DO ]1=MLI.DEALLOCIRQ lda #1 .FIN - .DO ]1=MLIATALK + .DO ]1=MLI.ATALK lda #1 .FIN - .DO ]1=MLIREADBLOCK + .DO ]1=MLI.READBLOCK lda #3 .FIN - .DO ]1=MLIWRITEBLOCK + .DO ]1=MLI.WRITEBLOCK lda #3 .FIN - .DO ]1=MLICREATE + .DO ]1=MLI.CREATE lda #7 .FIN - .DO ]1=MLIDESTROY + .DO ]1=MLI.DESTROY lda #1 .FIN - .DO ]1=MLIRENAME + .DO ]1=MLI.RENAME lda #2 .FIN - .DO ]1=MLISETFILEINFO + .DO ]1=MLI.SFINFO lda #7 .FIN - .DO ]1=MLIGETFILEINFO + .DO ]1=MLI.GFINFO lda #10 .FIN - .DO ]1=MLIONLINE + .DO ]1=MLI.ONLINE lda #2 .FIN - .DO ]1=MLISETPREFIX + .DO ]1=MLI.SETPREFIX lda #1 .FIN - .DO ]1=MLIGETPREFIX + .DO ]1=MLI.GETPREFIX lda #1 .FIN - .DO ]1=MLIOPEN + .DO ]1=MLI.OPEN lda #3 .FIN - .DO ]1=MLINEWLINE + .DO ]1=MLI.NEWLINE lda #3 .FIN - .DO ]1=MLIREAD + .DO ]1=MLI.READ lda #4 .FIN - .DO ]1=MLIWRITE + .DO ]1=MLI.WRITE lda #4 .FIN - .DO ]1=MLICLOSE + .DO ]1=MLI.CLOSE lda #1 .FIN - .DO ]1=MLIFLUSH + .DO ]1=MLI.FLUSH lda #1 .FIN - .DO ]1=MLISETMARK + .DO ]1=MLI.SETMARK lda #2 .FIN - .DO ]1=MLIGETMARK + .DO ]1=MLI.GETMARK lda #2 .FIN - .DO ]1=MLISETEOF + .DO ]1=MLI.SETEOF lda #2 .FIN - .DO ]1=MLIGETEOF + .DO ]1=MLI.GETEOF lda #2 .FIN - .DO ]1=MLISETBUF + .DO ]1=MLI.SETBUF lda #2 .FIN - .DO ]1=MLIGETBUF + .DO ]1=MLI.GETBUF lda #2 .FIN - .DO ]1=MLISETFILEINFOEX + .DO ]1=MLI.SFINFOEX lda #2 .FIN - .DO ]1=MLIGETFILEINFOEX + .DO ]1=MLI.GFINFOEX lda #2 .FIN - .DO ]1=MLIACL + .DO ]1=MLI.ACL lda #2 .FIN diff --git a/INC/MLI.I.txt b/INC/MLI.I.txt index f7f3f785..2498575e 100644 --- a/INC/MLI.I.txt +++ b/INC/MLI.I.txt @@ -8,37 +8,37 @@ MLI.MAXPATH .EQ 64 *-------------------------------------- * PRODOS Defines *-------------------------------------- -MLIALLOCIRQ .EQ $40 -MLIDEALLOCIRQ .EQ $41 -MLIATALK .EQ $42 -MLIQUIT .EQ $65 -MLIREADBLOCK .EQ $80 -MLIWRITEBLOCK .EQ $81 -MLIGETTIME .EQ $82 -MLICREATE .EQ $C0 -MLIDESTROY .EQ $C1 -MLIRENAME .EQ $C2 -MLISETFILEINFO .EQ $C3 -MLIGETFILEINFO .EQ $C4 -MLIONLINE .EQ $C5 -MLISETPREFIX .EQ $C6 -MLIGETPREFIX .EQ $C7 -MLIOPEN .EQ $C8 -MLINEWLINE .EQ $C9 -MLIREAD .EQ $CA -MLIWRITE .EQ $CB -MLICLOSE .EQ $CC -MLIFLUSH .EQ $CD -MLISETMARK .EQ $CE -MLIGETMARK .EQ $CF -MLISETEOF .EQ $D0 -MLIGETEOF .EQ $D1 -MLISETBUF .EQ $D2 -MLIGETBUF .EQ $D3 +MLI.ALLOCIRQ .EQ $40 +MLI.DEALLOCIRQ .EQ $41 +MLI.ATALK .EQ $42 +MLI.QUIT .EQ $65 +MLI.READBLOCK .EQ $80 +MLI.WRITEBLOCK .EQ $81 +MLI.GETTIME .EQ $82 +MLI.CREATE .EQ $C0 +MLI.DESTROY .EQ $C1 +MLI.RENAME .EQ $C2 +MLI.SFINFO .EQ $C3 +MLI.GFINFO .EQ $C4 +MLI.ONLINE .EQ $C5 +MLI.SETPREFIX .EQ $C6 +MLI.GETPREFIX .EQ $C7 +MLI.OPEN .EQ $C8 +MLI.NEWLINE .EQ $C9 +MLI.READ .EQ $CA +MLI.WRITE .EQ $CB +MLI.CLOSE .EQ $CC +MLI.FLUSH .EQ $CD +MLI.SETMARK .EQ $CE +MLI.GETMARK .EQ $CF +MLI.SETEOF .EQ $D0 +MLI.GETEOF .EQ $D1 +MLI.SETBUF .EQ $D2 +MLI.GETBUF .EQ $D3 * ProDOS FX -MLISETFILEINFOEX .EQ $D4 -MLIGETFILEINFOEX .EQ $D5 -MLIACL .EQ $D6 +MLI.SFINFOEX .EQ $D4 +MLI.GFINFOEX .EQ $D5 +MLI.ACL .EQ $D6 *-------------------------------------- * 7 6 5 4 3 2 1 0 * +--+--+--+--+--+--+--+--+ @@ -123,12 +123,12 @@ TBX.EnumBlk .EQ 2 TBX.EnumNext .EQ 4 *-------------------------------------- MLI .EQ $BF00 -*JSPARE .EQ $BF03 -DATETIME .EQ $BF06 -SYSERR .EQ $BF09 -*SYSDEATH .EQ $BF0C -*SERR .EQ $BF0F -DEVPTRS .EQ $BF10 +GP.DISPATCH .EQ $BF03 +GP.CLOCK .EQ $BF06 +GP.SYSERR .EQ $BF09 +GP.SYSDEATH .EQ $BF0C +GP.ERROR .EQ $BF0F +GP.DEVPTRS .EQ $BF10 *DEVPTRS0D1 .EQ $BF10 *DEVPTRS1D1 .EQ $BF12 *DEVPTRS2D1 .EQ $BF14 @@ -140,35 +140,36 @@ DEVPTRS .EQ $BF10 *DEVPTRS0D2 .EQ $BF20 *DEVPTRS1D2 .EQ $BF22 *DEVPTRS2D2 .EQ $BF24 -DEVPTRS3D2 .EQ $BF26 +GP.DEVPTRS3D2 .EQ $BF26 *DEVPTRS4D2 .EQ $BF28 *DEVPTRS5D2 .EQ $BF2A *DEVPTRS6D2 .EQ $BF2C *DEVPTRS7D2 .EQ $BF2E -DEVNUM .EQ $BF30 -DEVCNT .EQ $BF31 0 -> 13 -DEVLST .EQ $BF32 -> $BF3F +GP.DEVNUM .EQ $BF30 +GP.DEVCNT .EQ $BF31 0 -> 13 +GP.DEVLST .EQ $BF32 -> $BF3F *DEVLST0END .EQ $BF40 A 0 was added to ensure list ended with 0 if 14 devices in list *PRODOSCOPYRIGHT .EQ $BF41 ;free->$BF4B -MLIENTRY .EQ $BF4B to bypass ATLK hook -MEMTABL .EQ $BF58 -> $BF6F -*GL.BUFF .EQ $BF70 +GP.MLIENTRY .EQ $BF4B to bypass ATLK hook +GP.MEMTABL .EQ $BF58 -> $BF6F +GB.BUFTABL .EQ $BF70 *INTRUPT1 .EQ $BF80 *INTRUPT2 .EQ $BF82 *INTRUPT3 .EQ $BF84 *INTRUPT4 .EQ $BF86 -DATELO .EQ $BF90 -TIMELO .EQ $BF92 -LEVEL .EQ $BF94 -*BUBIT .EQ $BF95 +GP.DATE .EQ $BF90 +GP.TIME .EQ $BF92 +GP.FLEVEL .EQ $BF94 +GP.BUBIT .EQ $BF95 *SPARE1 .EQ $BF96 -MACHID .EQ $BF98 +GP.NEWPFXPTR .EQ $BF97 +GP.MACHID .EQ $BF98 MACHID.T .EQ %11001000 *MACHID.T.II .EQ %00000000 -*MACHID.T.IIp .EQ %01000000 +*MACHID.T.IIp .EQ %01000000 MACHID.T.IIe .EQ %10000000 MACHID.T.IIc .EQ %10001000 -*MACHID.T.III .EQ %11000000 +*MACHID.T.III .EQ %11000000 MACHID.M .EQ %00110000 MACHID.M.128 .EQ %00110000 *MACHID.M.64 .EQ %00100000 @@ -176,14 +177,15 @@ MACHID.M.128 .EQ %00110000 *MACHID.SPARE .EQ %00000100 MACHID.COL80 .EQ %00000010 MACHID.CLK .EQ %00000001 -*SLTBYT .EQ $BF99 -*PFIXPTR .EQ $BF9A -*MLIACTV .EQ $BF9B +GP.SLTBYT .EQ $BF99 +GP.PFXPTR .EQ $BF9A +GP.MLIACTV .EQ $BF9B *CMDADR .EQ $BF9C *SAVEX .EQ $BF9E *SAVEY .EQ $BF9F *-------------------------------------- -* code $BFA0 -> $BFF3 +* GP.MLIEXIT $BFA0 +* GP.MLICONT $BFB7 *-------------------------------------- *BNKBYT1 .EQ $BFF4 *BNKBYT2 .EQ $BFF5 @@ -191,7 +193,7 @@ MACHID.CLK .EQ %00000001 *IBAKVER .EQ $BFFC *IVERSION .EQ $BFFD *KBAKVER .EQ $BFFE -*KVERSION .EQ $BFFF +GP.KVER .EQ $BFFF *-------------------------------------- MAN SAVE inc/mli.i diff --git a/INC/ROM.II.txt b/INC/ROM.II.txt new file mode 100644 index 00000000..10e4d11d --- /dev/null +++ b/INC/ROM.II.txt @@ -0,0 +1,100 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* II ROM Calls +*-------------------------------------- +ROM.INBUF .EQ $0200 + +ROM.BRKV .EQ $03F0 +ROM.SOFTEV .EQ $03F2 +ROM.PWREDUP .EQ $03F4 +ROM.AMPJMP .EQ $03F5 +ROM.USRJMP .EQ $03F8 +ROM.NMIJMP .EQ $03FB +ROM.IRQV .EQ $03FE + +ROM.MSLOT .EQ $07F8 $Cn, where n•slot using $C800 +*-------------------------------------- +ROM.PLOT .EQ $F800 PLOT LORES BLOCK +ROM.HLINE .EQ $F819 HORIZ LORES LINE +ROM.VLINE .EQ $F828 VERTICAL LORES LINE +ROM.CLRSCR .EQ $F832 CLEAR FULL LORES SCREEN +ROM.CLRTOP .EQ $FB36 CLEAR TOP. LORES SCREEN +ROM.GBSCALC .EQ $F847 LORES BASE CALCULATION +ROM.NEXTCOL .EQ $F85F INCREASE LORES COLOR BY 3 +ROM.SETCOL .EQ $F864 SET LORES COLOR +ROM.SCRN .EQ $F871 READ LORES SCREEN COLOR +*-------------------------------------- +ROM.PRNTAX .EQ $F941 OUTPUT A THEN X. AS HEX +ROM.PRBLNK .EQ $F948 OUTPUT 3 SPACES VIA BOOKS +ROM.PRBL2 .EQ $F94A OUTPUT X BLANKS VIA HOOKS +ROM.ROMIRQ .EQ $FA41 IRQ ENTRY +ROM.BREAKV .EQ $FA59 BREAK VECTOR +ROM.RESETV .EQ $FA62 RESET ENTRY +ROM.REGDSP .EQ $FAD7 DISPLAY WORKING REGISTERS +ROM.PREAD .EQ $FB1E READ GAME PADDLE X +ROM.INIT .EQ $FB2F INITIALIZE TEXT SCREEN +ROM.SETTXT .EQ $FB39 SET UP TEXT SCREEN (NOT 2E!) +ROM.SETGR .EQ $FB40 SET UP GRAPHICS SCREEN +ROM.SETWND .EQ $FB4B SET NORMAL TEXT WINDOW +ROM.TABV .EQ $FB5B +ROM.SETPWRC .EQ $FB6F +ROM.VERSION .EQ $FBB3 MONITOR ROM ID BYTE +ROM.ZIDBYTE .EQ $FBC0 MONITOR ROM ID BYTE +ROM.BASCALC .EQ $FBC1 CALCULATE TEXT BASE ADDRESS (NOT 2E!} +ROM.BELL1 .EQ $FBDD BEEP SPEAKER IF CTRL-G +ROM.BELL2 .EQ $FBE4 BEEP SPEAKER ONCE +ROM.ADVANCE .EQ $FBF4 TEXT CURSOR ONE TO RIGHT +ROM.VIDOUT .EQ $FBFD OUTPUT ASCII TO SCREEN ONLY +ROM.BS .EQ $FC10 BACKSPACE SCREEN +ROM.UP .EQ $FC1A MOVE SCREEN CURSOR UP ONE LINE +ROM.VTAB .EQ $FC22 VERTICAL SCREEN TAB USING CV +ROM.VTABA .EQ $FC24 VERTICAL SCREEN TAB USING A +ROM.ESC1 .EQ $FC66 PROCESS ESCAPE CURSOR MOVES +ROM.CLREOP .EQ $FC42 CLEAR TO END OF PAGE +ROM.HOME .EQ $FC58 CLEAR TEXT SCREEN AND HOME CURSOR +ROM.CR .EQ $FC62 CARRIAGE RETURN TO SCREEN +ROM.LF .EQ $FC66 LINEFEED TO SCREEN ONLY +ROM.SCROLL .EQ $FC70 SCROLL TEXT SCREEN UP ONE +ROM.CLREOL .EQ $FC9C CLEAR TEXT TO END OF LINE +ROM.WAIT .EQ $FCA8 TIME DELAY SET BY ACCUMULATOR +ROM.RDKEY .EQ $FD0C GET INPUT CHARACTER VIA HOOKS +ROM.KEYIN .EQ $FD1B READ THE APPLE KEYBOARD +ROM.RDCHAR .EQ $FD35 GET KEY AND PROCESS ESC A-F +ROM.CANCEL .EQ $FD62 CANCEL KEYBOARD LINE ENTRY +ROM.GETLNZ .EQ $FD67 CR THEN GET KEYBOARD INPUT LINE +ROM.GETLN .EQ $FD6A GET KEYBOARD INPUT LINE +ROM.GETLN1 .EQ $FD6F GET KBD INPUT, NO PROMPT +ROM.CROUT1 .EQ $FD8B CLEAR EOL THEN CR VIA BOOKS +ROM.CROUT .EQ $FD8E OUTPUT CR VIA HOOKS +ROM.PRBYTE .EQ $FDDA OUTPUT FULL A IN HEX TO HOOKS +ROM.PRHEX .EQ $FDE3 OUTPUT LOW A IN HEX TO HOOKS +ROM.COUT .EQ $FDED OUTPUT CHARACTER VIA HOOKS +ROM.COUTL .EQ $FDF0 OUTPUT CHARACTER TO SCREEN +ROM.IDROUTINE .EQ $FE1F RETURNS SYSTEM INFO +ROM.MOVE .EQ $FE2C MOVE BLOCK OF MEMORY +ROM.VERIFY .EQ $FE36 VERIFY BLOCK OF MEMORY +ROM.LIST .EQ $FE5E DISASSEMBLE 20 INSTRUCTIONS +ROM.LIST2 .EQ $FE63 DISASSEMBLE •A• INSTRUCTIONS +ROM.SETINV .EQ $FE80 PRINT INVERSE TEXT TO SCREEN +ROM.SETNORM .EQ $FE84 PRINT NORMAL TEXT TO SCREEN +ROM.SETKBD .EQ $FE89 GRAB INPUT HOOKS FOR KEYBOARD +ROM.SETVID .EQ $FE93 GRAB OUTPUT HOOKS FOR SCREEN +ROM.XBASIC .EQ $FEB0 GO BASIC, DESTROYING OLD +ROM.BASCON .EQ $FEB3 GO BASIC, CONTINUING OLD +ROM.TRACE .EQ $FEC2 START TRACING (OLD ROM ONLY!) +ROM.STEP .EQ $FEC4 SINGLE STEP (OLD ROM ONLY!) +ROM.WRITE .EQ $FECD WRITE TO CASSETTE TAPE +ROM.READ .EQ $FEF0 READ TO CASSETTE TAPE +ROM.PRERR .EQ $FF2D PRINT "ERR" TO OUTPUT HOOK +ROM.BELL .EQ $FF3A OUTPUT BELL TO HOOKS +ROM.IORESR .EQ $FF3F RESTORE ALL WORKING REGISTER +ROM.IOSAVE .EQ $FF4A SAVE ALL WORKING REGISTERS +ROM.RETURN .EQ $FF58 "GUARANTEED" RETURN +ROM.OLDRST .EQ $FF59 OLD RESET, NO AUTOSTART +ROM.MON .EQ $FF65 ENTER MONITOR AND BEEP SPEAKER +ROM.MONZ .EQ $FF69 ENTER MONITOR QUIETLY +ROM.GETNUM .EQ $FFA7 ASCII TO HEX IN 3E & 3F +*-------------------------------------- +MAN +SAVE inc/rom.ii.i diff --git a/INC/ROM.IIE.txt b/INC/ROM.IIE.txt new file mode 100644 index 00000000..0767c224 --- /dev/null +++ b/INC/ROM.IIE.txt @@ -0,0 +1,19 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* IIe ROM Calls +*-------------------------------------- +ROM.OLDCH .EQ $0478+3 LAST CH used by video firmware +ROM.MODE .EQ $04F8+3 video firmware operating mode +ROM.OURCH .EQ $0578+3 80 column CH +ROM.OURCV .EQ $05F8+3 80 column CV +ROM.CHAR .EQ $0678+3 character to be printed/read +ROM.XCOORD .EQ $06F8+3 GOTOXY X-coord (pascal only) +ROM.OLDBASL .EQ $0778+3 last BASL (pascal only) +ROM.OLDBASH .EQ $07F8+3 last BASH (pascal only) + +ROM.AUXMOVE .EQ $C311 +ROM.XFER .EQ $C314 +*-------------------------------------- +MAN +SAVE inc/rom.iie.i diff --git a/INC/ROM.IIGS.txt b/INC/ROM.IIGS.txt new file mode 100644 index 00000000..4b111a6f --- /dev/null +++ b/INC/ROM.IIGS.txt @@ -0,0 +1,47 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* IIgs Macros & ROM Calls +*-------------------------------------- +*-------------------------------------- + .MA SHORTMX + sep #$30 + .EM + .MA SHORTM + sep #$20 + .EM + .MA SHORTX + sep #$10 + .EM + .MA LONGMX + rep #$30 + .EM + .MA LONGM + rep #$20 + .EM + .MA LONGX + rep #$10 + .EM +*-------------------------------------- + .MA IIGS + ldx ##]1 + jsl $E10000 + .EM +*-------------------------------------- +P8QUIT .EQ $E0D000 +GSOS .EQ $E100A8 +GSOS2 .EQ $E100B0 +OS_BOOT .EQ $E100BD indicates O/S initially booted +*-------------------------------------- +MMStartUp .EQ $0202 +NewHandle .EQ $0902 +PtrToHand .EQ $2802 +MessageCenter .EQ $1501 +DisposeHandle .EQ $1002 +MMShutDown .EQ $0302 +ReadTimeHex .EQ $0D03 +Int2Hex .EQ $220B +TLTextMountVolume .EQ $1201 +*-------------------------------------- +MAN +SAVE inc/rom.iigs.i diff --git a/INC/ZP.I.txt b/INC/ZP.I.txt index 282af0c2..ad70e3b7 100644 --- a/INC/ZP.I.txt +++ b/INC/ZP.I.txt @@ -3,27 +3,41 @@ NEW *-------------------------------------- * ProDOS Reserved ZP Location 00-1F,56-FF *-------------------------------------- -WNDLFT .EQ $20 SCROLL WINDOW LEFT -WNDWDTH .EQ $21 SCROLL WINDOW WIDTH -WNDTOP .EQ $22 SCROLL WINDOW TOP -WNDBOT .EQ $23 SCROLL WINDOW BOTTOM -CH .EQ $24 CURSOR HORIZONTAL -CV .EQ $25 CURSOR VERTICAL -GBASL .EQ $26 LORES BASE LOW -GBASH .EQ $27 LORES BASE HIGH -BASL .EQ $28 TEXT BASE LOW -BASH .EQ $29 TEXT BASE HIGH -BEND .EQ $2C LORES RIGHT END H LINE -VBOT .EQ $2D LORES BOTTOM OF V LINE -COLOR .EQ $30 LORES COLOR -INVFLG .EQ $32 NORMAL/INVERSE /FLASH (FF,7F,3F) -PROMPT .EQ $33 HOLDS PROMPT SYMBOL -CSWL .EQ $36 OUTPUT CHARACTER HOOK LOW -CSWH .EQ $37 OUTPUT CHARACTER HOOK HIGH -KSWL .EQ $38 INPUT CHARACTER HOOOK LOW -KSWH .EQ $39 INPUT CHARACTER HOOK HIGH -RNDL .EQ $4E RANDOM NUMBER LOW -RNDH .EQ $4F RANDOM NUMBER HIGH +ZP.WNDLFT .EQ $20 SCROLL WINDOW LEFT +ZP.WNDWDTH .EQ $21 SCROLL WINDOW WIDTH +ZP.WNDTOP .EQ $22 SCROLL WINDOW TOP +ZP.WNDBOT .EQ $23 SCROLL WINDOW BOTTOM +ZP.CH .EQ $24 CURSOR HORIZONTAL +ZP.CV .EQ $25 CURSOR VERTICAL +ZP.GBASL .EQ $26 LORES BASE LOW +ZP.GBASH .EQ $27 LORES BASE HIGH +ZP.BASL .EQ $28 TEXT BASE LOW +ZP.BASH .EQ $29 TEXT BASE HIGH +ZP.BEND .EQ $2C LORES RIGHT END H LINE +ZP.VBOT .EQ $2D LORES BOTTOM OF V LINE +ZP.COLOR .EQ $30 LORES COLOR +ZP.INVFLG .EQ $32 NORMAL/INVERSE /FLASH (FF,7F,3F) +ZP.PROMPT .EQ $33 HOLDS PROMPT SYMBOL +ZP.CSWL .EQ $36 OUTPUT CHARACTER HOOK LOW +ZP.CSWH .EQ $37 OUTPUT CHARACTER HOOK HIGH +ZP.KSWL .EQ $38 INPUT CHARACTER HOOOK LOW +ZP.KSWH .EQ $39 INPUT CHARACTER HOOK HIGH +ZP.PCL .EQ $3A +ZP.PCH .EQ $3B +ZP.A1L .EQ $3C +ZP.A1H .EQ $3D +ZP.A2L .EQ $3E +ZP.A2H .EQ $3F +ZP.A3L .EQ $40 +ZP.A4L .EQ $42 + +ZP.CMDNUM .EQ $42 +ZP.UNITNUM .EQ $43 +ZP.BUFPTR .EQ $44 +ZP.BLKNUM .EQ $46 + +ZP.RNDL .EQ $4E RANDOM NUMBER LOW +ZP.RNDH .EQ $4F RANDOM NUMBER HIGH *-------------------------------------- MAN SAVE inc/zp.i diff --git a/LIB/LIBETALK.S.RTMP.txt b/LIB/LIBETALK.S.RTMP.txt index 609f2059..d38d4ad3 100644 --- a/LIB/LIBETALK.S.RTMP.txt +++ b/LIB/LIBETALK.S.RTMP.txt @@ -3,8 +3,7 @@ NEW *-------------------------------------- RTMP.IN.REQ RTMP.IN.REP - clc - rts + jmp FRM.DiscardIn *-------------------------------------- MAN SAVE usr/src/lib/libetalk.s.rtmp diff --git a/ProDOS.FX/PDOS8M.S.txt b/ProDOS.FX/PDOS8M.S.txt new file mode 100644 index 00000000..323ae006 --- /dev/null +++ b/ProDOS.FX/PDOS8M.S.txt @@ -0,0 +1,230 @@ +NEW + AUTO 3,1 + .LIST OFF + .OP 65816 + .OR $2000 + .TF PRODOS8M,TSYS +*-------------------------------------- +KVER .EQ 30 release 3.0.0 +*-------------------------------------- +READCAT .EQ 1 Boot Block read Catalog at $C00 +ENHFILENAME .EQ 1 +LOWERCASE .EQ 1 +ACL .EQ 1 +LOGO .EQ 1 +AUXLC .EQ 1 +M.PM .EQ 0 +M.RAM .EQ 0 +*-------------------------------------- + .INB inc/zp.i + .INB inc/io.i + .INB inc/io.iigs.i + .INB inc/io.d2.i + .INB inc/mli.i + .INB inc/mli.e.i + .INB inc/rom.ii.i + .INB inc/rom.iie.i + .INB inc/rom.iigs.i +*-------------------------------------- +ILDR .EQ $0800 + +GP .EQ $BF00 +XRW .EQ $D000 +CLK .EQ $D742 + +XDOS.PathBuf .EQ $D700 +*XDOS.prefixbuf .EQ $D742+125 +XDOS.FCBs .EQ $D800 8 opened files +XDOS.VCBs .EQ $D900 10 mounted vols +XDOS.BMBuf .EQ $DA00 512 byte bitmap buffer +XDOS.GBuf .EQ $DC00 general purpose 512 byte block buffer + +XDOS .EQ $DE00 + +RAM .EQ $FF00 +IRQ .EQ $FF9B + +RAMX .EQ $0200 +*-------------------------------------- + .DUMMY + .OR $10 +ZPPtr1 .BS 2 +ZPPtr2 .BS 2 +ZPInBufPtr .BS 2 +ZPOutBufPtr .BS 2 + +ZPnCnt .BS 2 +ZPInMask .BS 1 +ZPBLOfsLBits .BS 1 +ZPBLOfsHBits .BS 1 +ZPBLLenBits .BS 1 + .ED +*-------------------------------------- + .INB usr/src/prodos.fx/prodos.s.ldr +X.Unpak.XatYAX .DO AUXLC=1 + stx X.Unpak.XatYAX.X+1 + + php + sei + + sta IO.SETALTZP + tsx + stx $100 + ldx $101 + txs +X.Unpak.XatYAX.X + ldx #$FF SELF MODIFIED + jsr X.Unpak.XatYA + + tsx + stx $101 + ldx $100 + txs + sta IO.CLRALTZP + plp + rts + + .FIN +X.Unpak.XatYA sty ZPOutBufPtr + sta ZPOutBufPtr+1 + lda PAKME.Table,x + sta ZPInBufPtr + lda PAKME.Table+1,x + sta ZPInBufPtr+1 + .INB usr/src/shared/x.unpak.s + .DO LOGO=1 + .INB usr/src/prodos.fx/prodos.s.logo + .FIN +*-------------------------------------- +ILDR.PAK .DA #0 + .DA ILDR.LEN + .INB usr/src/prodos.fx/prodos.s.ildr + +GP.PAK .DA #0 + .DA GP.LEN + .INB usr/src/prodos.fx/prodos.s.gp + +XRW.PAK .DA #0 + .DA XRW.LEN + .INB usr/src/prodos.fx/prodos.s.xrw + +XDOS.PAK .DA #0 + .DA XDOS.LEN + .INB usr/src/prodos.fx/prodos.s.xdos.a + .INB usr/src/prodos.fx/prodos.s.xdos.b + .INB usr/src/prodos.fx/prodos.s.xdos.c + .INB usr/src/prodos.fx/prodos.s.xdos.d + .INB usr/src/prodos.fx/prodos.s.xdos.e + .INB usr/src/prodos.fx/prodos.s.xdos.f + +IRQ.PAK .DA #0 + .DA IRQ.LEN + .INB usr/src/prodos.fx/prodos.s.irq + + .DO M.RAM=1 +RAM.PAK .DA #0 + .DA RAM.LEN + .INB usr/src/prodos.fx/prodos.s.ram + +RAMX.PAK .DA #0 + .DA RAMX.LEN + .INB usr/src/prodos.fx/prodos.s.ramx + .FIN + +DCLK.PAK .DA #0 + .DA DCLK.LEN + .INB usr/src/prodos.fx/prodos.s.dclk + +NCLK.PAK .DA #0 + .DA NCLK.LEN + .INB usr/src/prodos.fx/prodos.s.nclk + +TCLK.PAK .DA #0 + .DA TCLK.LEN + .INB usr/src/prodos.fx/prodos.s.tclk + +XCLK.PAK .DA #0 + .DA XCLK.LEN + .INB usr/src/prodos.fx/prodos.s.xclk + +CCLK.PAK .DA #0 + .DA CCLK.LEN + .INB usr/src/prodos.fx/prodos.s.cclk + +SEL1.PAK .DA #0 + .DA SEL1.LEN + .INB usr/src/prodos.fx/prodos.s.sel1 + +SEL2.PAK .DA #0 + .DA SEL2.LEN + .INB usr/src/prodos.fx/prodos.s.sel2 +*-------------------------------------- +PAKME.Table +PAKME.ID .SE 0 + +PAKME.ILDR.ID .EQ PAKME.ID +PAKME.ILDR .DA ILDR.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.GP.ID .EQ PAKME.ID +PAKME.GP .DA GP.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.XRW.ID .EQ PAKME.ID +PAKME.XRW .DA XRW.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.XDOS.ID .EQ PAKME.ID +PAKME.XDOS .DA XDOS.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.IRQ.ID .EQ PAKME.ID +PAKME.IRQ .DA IRQ.PAK +PAKME.ID .SE PAKME.ID+2 + + .DO M.RAM=1 +PAKME.RAM.ID .EQ PAKME.ID +PAKME.RAM .DA RAM.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.RAMX.ID .EQ PAKME.ID +PAKME.RAMX .DA RAMX.PAK +PAKME.ID .SE PAKME.ID+2 + .FIN + +PAKME.DCLK.ID .EQ PAKME.ID +PAKME.DCLK .DA DCLK.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.NCLK.ID .EQ PAKME.ID +PAKME.NCLK .DA NCLK.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.TCLK.ID .EQ PAKME.ID +PAKME.TCLK .DA TCLK.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.XCLK.ID .EQ PAKME.ID +PAKME.XCLK .DA XCLK.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.CCLK.ID .EQ PAKME.ID +PAKME.CCLK .DA CCLK.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.SEL1.ID .EQ PAKME.ID +PAKME.SEL1 .DA SEL1.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.SEL2.ID .EQ PAKME.ID +PAKME.SEL2 .DA SEL2.PAK +PAKME.ID .SE PAKME.ID+2 +*-------------------------------------- + .AS "PAKME" TAG + .DA $2000 BIN ORG + .DA #PAKME.ID/2 Chunk Count + .DA PAKME.Table Chunks +*-------------------------------------- +MAN +SAVE usr/src/prodos.fx/pdos8m.s +ASM diff --git a/ProDOS.FX/ProDOS.S.CCLK.txt b/ProDOS.FX/ProDOS.S.CCLK.txt index 16195475..baaf6d0a 100644 --- a/ProDOS.FX/ProDOS.S.CCLK.txt +++ b/ProDOS.FX/ProDOS.S.CCLK.txt @@ -1,13 +1,15 @@ NEW AUTO 3,1 *-------------------------------------- -CCLK.START >SHORTMX 8 bit mode. - lda statereg state register. +CCLK.START .PH CLK + +CCLK.START1 >SHORTMX 8 bit mode. + lda IO.GS.STATEREG state register. sta savestate save for restore after tool call. and #$CF clear the read/write aux memory bits. - sta statereg make it real + sta IO.GS.STATEREG make it real clc set e = 0 to set native mode - xce + xce >LONGMX 16 bit mode. lda ##$0000 zero out result space. pha push 4 words for hex time result @@ -17,22 +19,22 @@ CCLK.START >SHORTMX 8 bit mode. >IIGS ReadTimeHex >SHORTM back to 8 bit to get results from stack lda savestate restore state register - sta statereg + sta IO.GS.STATEREG pla pull off seconds and ignore pla - sta p8time minutes + sta GP.TIME minutes pla - sta p8time+1 hours + sta GP.TIME+1 hours pla year .1 cmp #100 out of range? bcc .2 no, go ahead and store sbc #$64 else put back in range. bra .1 try again -.2 sta p8date+1 year +.2 sta GP.DATE+1 year pla inc increment day for Prodos 8 format. - sta p8date day + sta GP.DATE day pla month inc increment month for Prodos 8 format. asl shift month as it sits in between @@ -40,9 +42,9 @@ CCLK.START >SHORTMX 8 bit mode. asl asl asl - ora p8date put all but the top bit of month - sta p8date value in the day byte. - rol p8date+1 put hi bit of month in low bit of year + ora GP.DATE put all but the top bit of month + sta GP.DATE value in the day byte. + rol GP.DATE+1 put hi bit of month in low bit of year pla pull of unused byte pla pull off day of week. stack now clean. sec go back to emulation mode @@ -50,7 +52,9 @@ CCLK.START >SHORTMX 8 bit mode. rts savestate .HS 00 state of the state register *-------------------------------------- - .LIST ON + .EP +*-------------------------------------- +* .LIST ON CCLK.LEN .EQ *-CCLK.START .LIST OFF *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.DCLK.txt b/ProDOS.FX/ProDOS.S.DCLK.txt index 72a5ef21..4a8b6ec5 100644 --- a/ProDOS.FX/ProDOS.S.DCLK.txt +++ b/ProDOS.FX/ProDOS.S.DCLK.txt @@ -1,13 +1,15 @@ NEW AUTO 3,1 *-------------------------------------- -* Driver For DS1215 +* Driver For Not Slot Clock (DS1215) *-------------------------------------- * we can safely use $200 (used by TCLK) *-------------------------------------- DS1215.DATA .EQ $200 Reverted YY MM DD Day HH mm SS CS *-------------------------------------- -DCLK.START php +DCLK.START .PH CLK + +DCLK.START1 php sei lda $C400 @@ -79,19 +81,19 @@ DCLK.START php asl asl ora DS1215.DATA+2 Get DD - sta DATELO + sta GP.DATE * lda DS1215.DATA Get YY pla rol - sta DATELO+1 + sta GP.DATE+1 lda DS1215.DATA+5 Get mm - sta TIMELO + sta GP.TIME lda DS1215.DATA+4 Get HH - sta TIMELO+1 + sta GP.TIME+1 stz $C0C0 @@ -103,7 +105,9 @@ DCLK.START php *-------------------------------------- DS1215.SIG .HS 5CA33AC55CA33AC5 Reverted 7->0 *-------------------------------------- - .LIST ON + .EP +*-------------------------------------- +* .LIST ON DCLK.LEN .EQ *-DCLK.START .LIST OFF *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.GP.txt b/ProDOS.FX/ProDOS.S.GP.txt index e01d2db9..1821874a 100644 --- a/ProDOS.FX/ProDOS.S.GP.txt +++ b/ProDOS.FX/ProDOS.S.GP.txt @@ -1,70 +1,69 @@ NEW AUTO 3,1 *-------------------------------------- -GP.START jmp GP.MLIENTRY $2E00-2EFF moved to $BF00 -jspare jmp * will be changed to point to dispatcher. -clockv rts changed to jmp ($4C) if clock present. - .DA XDOS.ClockDrv clock routine entry address. -GP.P8errv jmp XDOS.syserr error reporting hook. -GP.SysDeath jmp XDOS.SysDeath system failure hook. -p8error .DA #0 - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA nodevice - .DA #0 DEVNUM - .DA #$ff DEVCNT : count (-1) active devices - .HS 00000000000000 DEVLST : up to 14 units may be active +GP.START .PH GP + +GP.START1 jmp GP.MLIENTRY MLI Entry point + jmp * GP.DISPATCH : will be changed to point to dispatcher. + rts GP.CLOCK : changed to jmp ($4C) if clock present. + .DA CLK clock routine entry address. + jmp XDOS.SysErr GP.SYSERR : error reporting hook. + jmp XDOS.SysDeath GP.SYSDEATH : system failure hook. + .DA #0 GP.ERROR + .DA XDOS.NoDevice GP.DEVPTRS + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA XDOS.NoDevice + .DA #0 GP.DEVNUM + .DA #$ff GP.DEVCNT : count (-1) active devices + .HS 00000000000000 GP.DEVLST : up to 14 units may be active .HS 00000000000000 .DA #0 *-------------------------------------- - .AS "(C)APPLE " + .AS "(C)APPLE " 10 bytes, used for VEDRIVE/VSDRIVE *-------------------------------------- -GP.MLIENTRY php + php GP.MLIENTRY sei jmp GP.MLICONT *-------------------------------------- -*aftirq sta RRAMWRAMBNK1 read/write RAM bank 1 -* jmp fix45 restore $45 after interrupt in LC -*oldacc .DA #0 -*afbank .HS 00 +GP.TOOLBOX bit IO.RRAMWRAMBNK1 + jmp XDOS.TBX *-------------------------------------- .LIST ON GP.FREE1 .EQ $BF58-* .LIST OFF .BS GP.FREE1 -*-------------------------------------- +*-------------------------------------- * memory map of lower 48k. each bit represents 1 page. * protected pages = 1, unprotected = 0 - *-------------------------------------- - .HS C000000000000000 MEMTABL + .HS C000000000000000 GP.MEMTABL .HS 0000000000000000 .HS 0000000000000001 *-------------------------------------- * table of buffer addresses for currently open files. * these can only be changed thru the mli call setbuf. *-------------------------------------- -buftbl .HS 0000 file #1 - .HS 0000 file #2 - .HS 0000 file #3 - .HS 0000 file #4 - .HS 0000 file #5 - .HS 0000 file #6 - .HS 0000 file #7 - .HS 0000 file #8 + .HS 0000 GB.BUFTABL + .HS 0000 + .HS 0000 + .HS 0000 + .HS 0000 + .HS 0000 + .HS 0000 + .HS 0000 *-------------------------------------- * table of interrupt vectors. these can only be changed * by the mli call allocate_interrupt. values of the registers @@ -75,31 +74,27 @@ GP.IRQVs .HS 0000 int #1 .HS 0000 int #2 .HS 0000 int #3 .HS 0000 int #4 -*-------------------------------------- -*p8areg .DA #0 A register savearea -*p8xreg .DA #0 X register savearea -*p8yreg .DA #0 Y register savearea -*p8sreg .DA #0 S register savearea -*p8preg .DA #0 P register savearea -*bankid .DA #1 bank ID byte (ROM/RAM) -*intadr .HS 0000 interrupt return address *-------------------------------------- .BS 8 *-------------------------------------- -p8date .HS 0000 bits 15-9=yr, 8-5=mo, 4-0=day -p8time .HS 0000 bits 12-8=hr, 5-0=min, low-hi format -flevel .DA #0 current file level -bubit .DA #0 backup bit disable, setfileinfo only -*spare1 .DA #0 used to save acc - .DA #0 -newpfxptr .DA #0 appletalk alternate prefix ptr -machidbyte .DA #0 machine ID byte -rommap .DA #0 slot ROM bit map -preflag .DA #0 prefix active flag -mliact .DA #0 MLI active flag -mliretn .DA 0 last MLI call return address -mlix .DA #0 MLI X register savearea -mliy .DA #0 MLI Y register savearea + .HS 0000 GP.DATE + .HS 0000 GP.TIME + .DA #0 GP.FLEVEL : current file level + .DA #0 GP.BUBIT : backup bit disable, setfileinfo only + .DA #0 spare1: ProDOS 203 used to save acc + .DA #0 GP.NEWPFXPTR : appletalk alternate prefix ptr + .DA #0 GP.MACHID : machine ID byte + .DA #0 GP.SLTBYT : slot ROM bit map + .DA #0 GP.PFXPTR : prefix active flag + .DA #0 GP.MLIACTV : MLI active flag + .DO AUXLC=0 +GP.MLIRTN .DA 0 MLI call return address +GP.MLIX .DA #0 MLI X register savearea +GP.MLIY .DA #0 MLI Y register savearea + .ELSE +GP.MLIEXITX2 pha MLI error + lda GP.BNKBYT1 + .FIN *-------------------------------------- * language card bank switching routines which must reside at $BFA0 because * workstation software patches this area @@ -107,75 +102,93 @@ mliy .DA #0 MLI Y register savearea GP.MLIEXIT eor $E000 test for rom enable beq .1 taken if ram enabled - sta RROMBNK2 read ROM + sta IO.RROMBNK2 read ROM bne .2 always -.1 lda bnkbyt2 for alternate ram +.1 lda GP.BNKBYT2 for alternate ram eor $D000 test beq .2 branch if not alternate ram - lda RRAMWRAMBNK2 else enable alt $D000 + lda IO.RRAMWRAMBNK2 else enable alt $D000 .2 pla return code rti re-enable interrupts and return *-------------------------------------- -GP.MLICONT sec - ror mliact notify interrupt routines MLI active. +GP.MLICONT .DO AUXLC=0 + + sec + ror GP.MLIACTV notify interrupt routines MLI active. lda $E000 preserve language card/rom orientation - sta bnkbyt1 for proper restoration when mli exits. + sta GP.BNKBYT1 for proper restoration when mli exits. lda $D000 - sta bnkbyt2 - lda RRAMWRAMBNK1 force ram card on - lda RRAMWRAMBNK1 with write allowed - jmp XDOS + sta GP.BNKBYT2 + lda IO.RRAMWRAMBNK1 force ram card on + lda IO.RRAMWRAMBNK1 with write allowed + jmp XDOS.MAIN + + .ELSE + + sty GP.MLIEXIT.Y+1 + + pla A = Status register + + ply + sty GP.MLIEXIT.PCL+1 + ply + sty GP.MLIEXIT.PCH+1 + + ldy $E000 + sty GP.BNKBYT1 + ldy $D000 Y = BNKBYT2 + + sta IO.SETALTZP + + bit IO.RRAMWRAMBNK1 + jmp XDOS.AUX *-------------------------------------- -*GP.IrqExit lda bankid determine state of ram card (ROM/RAM) -*irqxit0 -* beq .2 branch if ram card enabled. -* bmi .1 branch if alternate $D000 enabled. - -* lsr determine if no ram card present. -* bcc .3 branch if rom only system. - -* lda RROMWRAMBNK2 enable rom -* bcs .3 always taken - -*.1 lda RRAMWRAMBNK2 enable alternate $D000 - -*.2 lda #$01 preset bankid for rom. -* sta bankid (reset if ram card interrupt) - -*.3 lda p8areg restore acc -* rti exit +* A = Status register +* Y = MLI Error code *-------------------------------------- -GP.TOOLBOX bit RRAMWRAMBNK1 - bit RRAMWRAMBNK1 - jsr XDOS.TBX - bit RROMBNK2 - rts +GP.MLIEXITX sta IO.CLRALTZP + +GP.MLIEXIT.PCH ldx #$FF SELF MODIFIED + phx +GP.MLIEXIT.PCL ldx #$FF SELF MODIFIED + phx + + phy S reg for RTI + +GP.MLIEXIT.X ldx #$FF SELF MODIFIED +GP.MLIEXIT.Y ldy #$FF SELF MODIFIED + bra GP.MLIEXITX2 + + .FIN *-------------------------------------- .LIST ON GP.FREE2 .EQ $BFEB-* .LIST OFF .BS GP.FREE2 *-------------------------------------- -GP.IRQV bit RRAMWRAMBNK1 ***NEW ROM ONLY IRQ $fffe > $Cxxx space*** - bit RRAMWRAMBNK1 Entry used when rom/mainLC/auxLC +GP.IRQV bit IO.RRAMWRAMBNK1 ***NEW ROM ONLY IRQ $fffe > $Cxxx space*** + bit IO.RRAMWRAMBNK1 Entry used when rom/mainLC/auxLC jmp IRQ *-------------------------------------- -bnkbyt1 .DA #0 -bnkbyt2 .DA #0 +GP.BNKBYT1 .DA #0 +GP.BNKBYT2 .DA #0 .HS 00000000 pad to before $BFFA .DA #4 gsos compatibility byte ($BFFA) .DA #0 pad .DA #0 reserved .DA #0 version # of running interpreter .DA #0 preserved for System Utilities -kversion .HS 23 represents release 2.0.3 + .DA #KVER GP.KVER : represents release 2.0.3 +*-------------------------------------- + .EP *-------------------------------------- GP.LEN .EQ *-GP.START +*-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.gp -LOAD usr/src/prodos.fx/prodos.s +LOAD usr/src/prodos.fx/pdos8m.s ASM diff --git a/ProDOS.FX/ProDOS.S.ILDR.txt b/ProDOS.FX/ProDOS.S.ILDR.txt index 4acecfdc..a2fcfb0b 100644 --- a/ProDOS.FX/ProDOS.S.ILDR.txt +++ b/ProDOS.FX/ProDOS.S.ILDR.txt @@ -1,8 +1,18 @@ NEW AUTO 3,1 *-------------------------------------- -ILDR.START jsr MLI check for file 'atinit' - .DA #MLIGETFILEINFO +devid .EQ $12 + +src .EQ $12 +dst .EQ $14 +*-------------------------------------- +ILDR.DBuf .EQ $0C00 +ILDR.IOBuf .EQ $1400 +*-------------------------------------- +ILDR.START .PH ILDR + +ILDR.START1 jsr MLI check for file 'atinit' + .DA #MLI.GFINFO .DA ILDR.GFINFO bcs ILDR.ENUMPM @@ -17,18 +27,18 @@ ILDR.START jsr MLI check for file 'atinit' .9 jmp ILDR.MLIERR -.1 lda RROMBNK2 enable ROM - jsr sysentry execute ATinit +.1 lda IO.RROMBNK2 enable ROM + jsr $2000 execute ATinit *-------------------------------------- * BOOT block read 4 directory blocks at dbuf=$C00 -> $13FF *-------------------------------------- ILDR.ENUMPM .DO READCAT=1 - lda LDR.MLIOL.P+1 Boot unitnum + lda LDR.MLIOL.P+1 Boot ZP.UNITNUM sta ILDR.MLIRB.P+1 stz dst - lda /dbuf + lda /ILDR.DBuf ldy #$02 read directory into buffer ldx #0 @@ -38,11 +48,13 @@ ILDR.ENUMPM .DO READCAT=1 stx ILDR.MLIRB.P+5 Blk Num HI jsr MLI - .DA #MLIREADBLOCK + .DA #MLI.READBLOCK .DA ILDR.MLIRB.P - bcs .99 + bcc .23 + + jmp ILDR.MLIERR - ldy #$03 get next block# from link +.23 ldy #$03 get next block# from link lda (dst),y tax dey @@ -54,24 +66,24 @@ ILDR.ENUMPM .DO READCAT=1 lda dst+1 inc inc add $200 to buffer pointer - cmp /dbuf+$800 until it points past end of buffer. + cmp /ILDR.DBuf+$800 until it points past end of buffer. bcc .22 if ok, read next block. .28 .FIN *-------------------------------------- - .DO PM + .DO M.PM=1 jsr ILDR.EnumInit .1 ldx #S.FI.T.BIN - ldy #ILDR.KMPFX - lda /ILDR.KMPFX + ldy #ILDR.PMPFX + lda /ILDR.PMPFX clc prefix jsr ILDR.EnumNext bcs .8 jsr ILDR.LoadFilePBuf - bcs .99 + bcs ILDR.MLIERR ldx #3 @@ -80,9 +92,9 @@ ILDR.ENUMPM .DO READCAT=1 dex bpl .2 - jsr sysentry + jsr $2000 - bit RROMBNK2 enable ROM + bit IO.RROMBNK2 enable ROM ldx #0 @@ -91,12 +103,10 @@ ILDR.ENUMPM .DO READCAT=1 inx cpx #4 bne .3 - - >DEBUGOA + >DEBUGOA + bra .1 - -.99 jmp ILDR.MLIERR .8 .FIN *-------------------------------------- @@ -112,27 +122,27 @@ ILDR.ENUMPM .DO READCAT=1 jsr ILDR.LoadFilePBuf bcs ILDR.MLIERR - bit RROMBNK2 enable ROM + bit IO.RROMBNK2 enable ROM - bit RDIOUDIS - sta SETIOUDIS - sta CLRDHIRES + bit IO.RDIOUDIS + sta IO.SETIOUDIS + sta IO.CLRDHIRES bmi .5 - sta CLRIOUDIS + sta IO.CLRIOUDIS -.5 sta CLR80DISP - sta CLR80STORE - sta SETTEXT - sta CLRMIXED - jsr init - jsr setvid - jsr setkbd - jsr home - jmp sysentry go run interpreter +.5 sta IO.CLR80DISP + sta IO.CLR80STORE + sta IO.SETTEXT + sta IO.CLRMIXED + jsr ROM.INIT + jsr ROM.SETVID + jsr ROM.SETKBD + jsr ROM.HOME + jmp $2000 go run interpreter .9 jsr MLI no .SYSTEM found, so quit. - .DA #MLIQUIT + .DA #MLI.QUIT .DA ILDR.QUIT *-------------------------------------- ILDR.MLIERR cmp #MLI.E.BADBUF @@ -143,47 +153,47 @@ ILDR.MLIERR cmp #MLI.E.BADBUF .HS 2C BIT ABS .1 ldx #ILDR.MSG.SYSLOADERR-ILDR.MSG - bit RROMBNK2 - jsr SETINV + bit IO.RROMBNK2 + jsr ROM.SETINV .2 lda ILDR.MSG,x pha ora #$80 - jsr COUT + jsr ROM.COUT inx pla bpl .2 lda #$A0 - jsr COUT + jsr ROM.COUT ldy #0 .3 iny - lda pbuf,y - jsr COUT - cpy pbuf + lda LDR.PBuf,y + jsr ROM.COUT + cpy LDR.PBuf bne .3 bra * *-------------------------------------- -ILDR.EnumInit lda /dbuf search directory buffer +ILDR.EnumInit lda /ILDR.DBuf search directory buffer sta idxl+1 - lda #dbuf+4 skip Prev/next Block Ptr + lda #ILDR.DBuf+4 skip Prev/next Block Ptr sta idxl - lda dbuf+35 EL + lda ILDR.DBuf+35 EL sta ILDR.EL - lda dbuf+36 EPB + lda ILDR.DBuf+36 EPB sta ILDR.EPB sta ILDR.EITB - lda dbuf+37 FCLO + lda ILDR.DBuf+37 FCLO eor #$ff sta ILDR.nFC - lda dbuf+38 FCHI + lda ILDR.DBuf+38 FCHI eor #$ff sta ILDR.nFC+1 @@ -235,12 +245,12 @@ ILDR.EnumNext stx ILDR.FT bmi .1 $D, $E, or $F... and #$0F - sta pbuf filename Len + sta LDR.PBuf filename Len tay .5 lda (idxl),y - sta pbuf,y + sta LDR.PBuf,y dey bne .5 @@ -251,16 +261,16 @@ ILDR.EnumNext stx ILDR.FT bne .1 lda (src) expected prefix/suffix len - cmp pbuf + cmp LDR.PBuf bcs .1 filename LE prefix/suffix bit ILDR.bPFXSFX bpl .12 go check prefix tay - ldx pbuf + ldx LDR.PBuf -.11 lda pbuf,x +.11 lda LDR.PBuf,x eor (src),y asl bne .1 @@ -273,7 +283,7 @@ ILDR.EnumNext stx ILDR.FT .12 lda (src) expected prefix/suffix len tay -.13 lda pbuf,y +.13 lda LDR.PBuf,y eor (src),y asl bne .1 @@ -285,7 +295,7 @@ ILDR.EnumNext stx ILDR.FT lda (idxl),y bpl .10 no lowercase information - ldx pbuf + ldx LDR.PBuf .6 cpx #8 CS if MIN_VERSION to use bcs .7 @@ -303,9 +313,9 @@ ILDR.EnumNext stx ILDR.FT and ILDR.LCBits-8,x beq .9 -.8 lda pbuf,x +.8 lda LDR.PBuf,x eor #$20 to lowercase - sta pbuf,x + sta LDR.PBuf,x .9 dex bne .6 @@ -314,19 +324,19 @@ ILDR.EnumNext stx ILDR.FT rts *-------------------------------------- ILDR.LoadFilePBuf - ldy #pbuf - lda /pbuf + ldy #LDR.PBuf + lda /LDR.PBuf ILDR.LoadFile sty ILDR.OPEN+1 Filename sta ILDR.OPEN+2 jsr MLI - .DA #MLIOPEN + .DA #MLI.OPEN .DA ILDR.OPEN bcs .9 jsr MLI - .DA #MLIGETEOF + .DA #MLI.GETEOF .DA ILDR.GETEOF bcs .9 @@ -342,15 +352,15 @@ ILDR.LoadFile sty ILDR.OPEN+1 Filename lda ILDR.GETEOF+2 bne .99 more than $9F00 -.1 jsr MLI - .DA #MLIREAD +.1 + jsr MLI + .DA #MLI.READ .DA ILDR.READ bcs .9 jsr MLI - .DA #MLICLOSE + .DA #MLI.CLOSE .DA ILDR.CLOSE - .9 rts .99 lda #MLI.E.BADBUF @@ -375,7 +385,7 @@ ILDR.MLIRB.P .DA #3 *-------------------------------------- ILDR.OPEN .DA #3 PARAM CNT .BS 2 Filename - .DA iobuf i/o buffer + .DA ILDR.IOBuf .HS 01 REF *-------------------------------------- ILDR.GETEOF .DA #2 PARAM CNT @@ -384,7 +394,7 @@ ILDR.GETEOF .DA #2 PARAM CNT *-------------------------------------- ILDR.READ .DA #4 PARAM CNT .HS 01 REF - .DA sysentry + .DA $2000 .DA $9F00 Max file size .HS 0000 *-------------------------------------- @@ -397,14 +407,11 @@ ILDR.QUIT .DA #4 PARAM CNT .HS 00 .HS 0000 *-------------------------------------- -ILDR.ATINIT .DA #6 - .AS "ATINIT" -ILDR.KMPFX .DA #3 - .AS "PM." -ILDR.SYSTEMSFX .DA #7 - .AS ".SYSTEM" -*-------------------------------------- -ILDR.LEN .EQ *-ILDR.START +ILDR.ATINIT .PS "ATINIT" + .DO M.PM=1 +ILDR.PMPFX .PS "PM." + .FIN +ILDR.SYSTEMSFX .PS ".SYSTEM" *-------------------------------------- .DUMMY ILDR.EPB .BS 1 @@ -414,8 +421,12 @@ ILDR.FT .BS 1 ILDR.EITB .BS 1 ILDR.bPFXSFX .BS 1 .ED +*-------------------------------------- + .EP +*-------------------------------------- +ILDR.LEN .EQ *-ILDR.START *-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.ildr -LOAD usr/src/prodos.fx/prodos.s +LOAD usr/src/prodos.fx/pdos8m.s ASM diff --git a/ProDOS.FX/ProDOS.S.IRQ.txt b/ProDOS.FX/ProDOS.S.IRQ.txt index 8e67fcd1..8570dc38 100644 --- a/ProDOS.FX/ProDOS.S.IRQ.txt +++ b/ProDOS.FX/ProDOS.S.IRQ.txt @@ -5,7 +5,9 @@ NEW * address $FFCB (ROM rts opcode) for rom switching to function. * $FF9B *-------------------------------------- -IRQ ldx #$FA save 6 bytes of page 0 +IRQ.START .PH IRQ + +IRQ.START1 ldx #$FA save 6 bytes of page 0 .2 lda $00,x sta IRQ.ZPSave-$FA,x @@ -35,7 +37,7 @@ IRQ ldx #$FA save 6 bytes of page 0 bne IRQ.Done before system death. lda #$01 bad irq so - jsr GP.SysDeath kill the system. + jsr GP.SYSDEATH kill the system. *-------------------------------------- .LIST ON IRQ.FREE1 .EQ $ffc8-* @@ -43,7 +45,7 @@ IRQ.FREE1 .EQ $ffc8-* .BS IRQ.FREE1 -IRQ.Reset1 sta RROMBNK2 +IRQ.ToRomRTS sta IO.RROMBNK2 .DO *=$FFCB * hits ROM rts at $FFCB .ELSE @@ -57,7 +59,7 @@ IRQ.Done ldx #$FA inx bne .1 -* lda CLRC8ROM +* lda IO.CLRC8ROM *IRQ.DoneCn lda $C100 SELF MODIFIED * lda IRQ.DoneCn+2 @@ -67,11 +69,11 @@ IRQ.Done ldx #$FA *-------------------------------------- IRQ.GoX jmp (GP.IRQVs,x) interrupt routine x -IRQ.Reset lda /resetv-1 +IRQ.Reset lda /ROM.RESETV-1 pha - lda #resetv-1 + lda #ROM.RESETV-1 pha - bra IRQ.Reset1 + bra IRQ.ToRomRTS IRQ.Cnt .HS 00 # of unclaimed interrupts. IRQ.ZPSave .HS 000000000000 6 bytes @@ -82,12 +84,14 @@ IRQ.FREE2 .EQ $fffa-* .BS IRQ.FREE2 - .DA nmivect nmi handler + .DA ROM.NMIJMP nmi handler .DA IRQ.Reset reset handler irqv .DA * PATCHED with ROM vector by LDR .LIST OFF *-------------------------------------- -IRQ.LEN .EQ *-IRQ + .EP +*-------------------------------------- +IRQ.LEN .EQ *-IRQ.START *-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.irq diff --git a/ProDOS.FX/ProDOS.S.LDR.txt b/ProDOS.FX/ProDOS.S.LDR.txt index 7ca70ea2..b5500708 100644 --- a/ProDOS.FX/ProDOS.S.LDR.txt +++ b/ProDOS.FX/ProDOS.S.LDR.txt @@ -1,5 +1,12 @@ NEW AUTO 3,1 +*-------------------------------------- +idapple .EQ $0C model machine id +idxl .EQ $10 general use 16 bit index pointer +*-------------------------------------- +auxsp .EQ $0101 +*-------------------------------------- +LDR.PBuf .EQ $0280 *-------------------------------------- .MA DEBUG :1 bit $C000 @@ -14,11 +21,11 @@ NEW :1 .EQ * .EM *-------------------------------------- -H2000 jmp prostart - jmp atalkset - jmp p16start +LDR.START jmp LDR.START8 + jmp LDR.STARTATK + jmp LDR.START8 *-------------------------------------- -LDR.MSG.PRODOS .AT "PRODOS FX 0.94" +LDR.MSG.PRODOS .AT "PRODOS FX 0.95" LDR.MSG.UNSUPP .AT "UNSUPPORTED HARDWARE" LDR.MSG.IIe .AT "//e" LDR.MSG.IIc .AT "//c" @@ -28,21 +35,22 @@ LDR.MSG.CLK .AT "?Clk" LDR.MSG.RAM .AT "/RAM" LDR.MSG.PFXERR .AT "ERR setting prefix" *-------------------------------------- -p16start inc LDR.BootFlag set = 2 for GQuit rts -atalkset inc LDR.BootFlag set = 1 for appletalk rts -prostart lda unitnum +LDR.START16 inc LDR.BootFlag set = 2 for GQuit rts +LDR.STARTATK inc LDR.BootFlag set = 1 for appletalk rts + +LDR.START8 lda ZP.UNITNUM sta LDR.MLIOL.P+1 cld - bit RROMBNK2 + bit IO.RROMBNK2 - sta CLR80DISP - sta CLR80STORE + sta IO.CLR80DISP + sta IO.CLR80STORE - jsr init - jsr setvid - jsr setkbd - jsr home + jsr ROM.INIT + jsr ROM.SETVID + jsr ROM.SETKBD + jsr ROM.HOME lda #32 @@ -56,11 +64,11 @@ prostart lda unitnum jsr LDR.PrintX sec - jsr idroutine returns system info + jsr ROM.IDROUTINE returns system info bcs .2 taken if not a //gs lda #$80 - trb newvideo video mode select + trb IO.GS.NEWVIDEO video mode select * test for at least a 65c02 @@ -73,7 +81,7 @@ prostart lda unitnum stz auxsp - sta SETALTZP + sta IO.SETALTZP stz auxsp lda auxsp @@ -83,7 +91,7 @@ prostart lda unitnum lda auxsp beq LDR.UNSUPP.HW - sta CLRALTZP + sta IO.CLRALTZP lda auxsp bne LDR.UNSUPP.HW NO 128k @@ -91,7 +99,7 @@ prostart lda unitnum LDR.CheckROM ldx #LDR.MSG.IIE lda #MACHID.T.IIe+MACHID.M.128+MACHID.COL80 - ldy version check hardware id + ldy ROM.VERSION check hardware id cpy #$06 apple //e? beq .1 if yes @@ -101,13 +109,14 @@ LDR.CheckROM ldx #LDR.MSG.IIE ldx #LDR.MSG.UNKNOWN bra m128k machine is unknown, Assume //e Enh 128k -.1 ldy zidbyte //c ? +.1 ldy ROM.ZIDBYTE //c ? bne .2 - ldy kbd //c, check for keypress + ldy IO.KBD //c, check for keypress cpy #$9B escape? (to disable accelerator) bne .11 - sta KBDSTROBE clear keyboard + + sta IO.KBDSTROBE clear keyboard .11 lda #MACHID.T.IIc+MACHID.M.128+MACHID.COL80 ldx #LDR.MSG.IIC @@ -123,7 +132,7 @@ LDR.CheckROM ldx #LDR.MSG.IIE bra m128k not a //e Enh.... .3 sec - jsr idroutine //gs ???? + jsr ROM.IDROUTINE //gs ???? bcs m128k no..... inc LDR.cortland @@ -151,31 +160,31 @@ m128k sta idapple Save MACHID in temp location bpl .2 lda #$01 patch for the gs rom - trb statereg to force off intcxrom + trb IO.GS.STATEREG to force off intcxrom - ldx #PAKME.GP-PAKME.Table - ldy #MLI - lda /MLI + ldx #PAKME.GP.ID + ldy #GP + lda /GP jsr X.Unpak.XatYA jsr LDR.LCBNK1 - ldx #PAKME.XRW-PAKME.Table - ldy #$D000 - lda /$D000 - jsr X.Unpak.XatYA + ldx #PAKME.XRW.ID + ldy #XRW + lda /XRW + jsr X.Unpak.XatYAX ldx #0 -.1 stz FCBs,x - stz VCBs,x +.1 stz XDOS.FCBs,x + stz XDOS.VCBs,x inx bne .1 - ldx #PAKME.XDOS-PAKME.Table - ldy #$DE00 - lda /$DE00 - jsr X.Unpak.XatYA + ldx #PAKME.XDOS.ID + ldy #XDOS + lda /XDOS + jsr X.Unpak.XatYAX ldx #XDOS.DATA.LEN @@ -183,65 +192,64 @@ m128k sta idapple Save MACHID in temp location dex bne .3 - ldx #PAKME.IRQ-PAKME.Table - ldy #$FF9B - lda /$FF9B - jsr X.Unpak.XatYA + ldx #PAKME.IRQ.ID + ldy #IRQ + lda /IRQ + jsr X.Unpak.XatYAX -LDR.IRQ lda RROMWRAMBNK2 +LDR.IRQ lda IO.RROMWRAMBNK2 ldy irqv interrupt vector ldx irqv+1 x = high byte jsr LDR.LCBNK1 - sta SETALTZP + sta IO.SETALTZP sty irqv save irq vector in aux lc stx irqv+1 - sta CLRALTZP + sta IO.CLRALTZP sty irqv stx irqv+1 save irq vector in main lc - lda #calldisp - sta jspare+1 P8 system death vector - lda /calldisp - sta jspare+2 + lda #XDOS.CallDisp + sta GP.DISPATCH+1 P8 system death vector + lda /XDOS.CallDisp + sta GP.DISPATCH+2 .DO LOWERCASE=0 - lda kversion + lda GP.KVER sta xdosver save current version for dir use .FIN lda idapple - sta MACHID + sta GP.MACHID lda LDR.cortland beq LDR.II branch if // family *-------------------------------------- -LDR.IIGS sta cortflag +LDR.IIGS sta XDOS.CortFlag - lda #calldisp - sta cortdisp - lda /calldisp - sta cortdisp+1 + lda #XDOS.CallDisp + sta XDOS.CortDisp + lda /XDOS.CallDisp + sta XDOS.CortDisp+1 -* lda RROMWRAMBNK2 +* lda IO.RROMWRAMBNK2 -* stz vmode force setvid to reset cursor +* stz ROM.MODE force setvid to reset cursor * jsr setvid reset output to screen * jsr LDR.LCBNK1 lda #'C' - ldx PAKME.CCLK - ldy PAKME.CCLK+1 + ldx #PAKME.CCLK.ID jsr LDR.SetupCLK -* ldx #PAKME.SEL2-PAKME.Table +* ldx #PAKME.SEL2.ID * ldy #$1000 * lda /$1000 -* jsr X.Unpak.XatYA +* jsr X.Unpak.XatYAX - ldx #PAKME.SEL2-PAKME.Table - jsr LDR.SetupQC + ldx #PAKME.SEL2.ID + jsr LDR.SetupSEL *-------------------------------------- lda LDR.BootFlag bne .1 branch if prodos 8 alone @@ -253,22 +261,24 @@ LDR.IIGS sta cortflag .1 bra LDR.Common *-------------------------------------- -LDR.II ldx #PAKME.SEL1-PAKME.Table - jsr LDR.SetupQC +LDR.II ldx #PAKME.SEL1.ID + jsr LDR.SetupSEL jsr LDR.ClkDevScan *-------------------------------------- LDR.Common jsr LDR.BlkDevScan + .DO M.RAM=1 jsr LDR.SetupRAM + .FIN *-------------------------------------- - lda LDR.MLIOL.P+1 Boot unitnum - sta DEVNUM + lda LDR.MLIOL.P+1 Boot ZP.UNITNUM + sta GP.DEVNUM - ldx DEVCNT + ldx GP.DEVCNT -.1 lda DEVLST,x - eor DEVNUM +.1 lda GP.DEVLST,x + eor GP.DEVNUM and #$f0 beq .2 @@ -277,73 +287,73 @@ LDR.Common jsr LDR.BlkDevScan brk -.2 lda DEVLST,x +.2 lda GP.DEVLST,x pha -.3 lda DEVLST+1,x - sta DEVLST,x - cpx DEVCNT +.3 lda GP.DEVLST+1,x + sta GP.DEVLST,x + cpx GP.DEVCNT inx bcc .3 pla - ldx DEVCNT - sta DEVLST,x + ldx GP.DEVCNT + sta GP.DEVLST,x lda LDR.BootFlag get setup entry point flag beq LDR.SetPrefix taken if normal boot. - bit RROMBNK2 + bit IO.RROMBNK2 rts return to caller at setup entry point. *-------------------------------------- LDR.SetPrefix jsr MLI - .DA #MLIONLINE + .DA #MLI.ONLINE .DA LDR.MLIOL.P bcs .9 - lda pbuf+1 get volume name length. + lda LDR.PBuf+1 get volume name length. and #$0F strip SDDDxxxx beq .9 inc add 1 for leading '/' - sta pbuf save prefix length. + sta LDR.PBuf save prefix length. lda #'/' place leading '/' in prefix buffer - sta pbuf+1 + sta LDR.PBuf+1 jsr MLI - .DA #MLISETPREFIX + .DA #MLI.SETPREFIX .DA LDR.MLISETP.P bcs .9 - jsr CROUT + jsr ROM.CROUT - ldx #PAKME.ILDR-PAKME.Table - ldy #ILDR.START - lda /ILDR.START + ldx #PAKME.ILDR.ID + ldy #ILDR + lda /ILDR jsr X.Unpak.XatYA - - jmp ILDR.START + + jmp ILDR .9 ldx #LDR.MSG.PFXERR jsr LDR.PrintX bra * *-------------------------------------- -LDR.SetupQC bit RRAMWRAMBNK2 read/write RAM bank 2 - bit RRAMWRAMBNK2 +LDR.SetupSEL bit IO.RRAMWRAMBNK2 read/write RAM bank 2 + bit IO.RRAMWRAMBNK2 ldy #$D100 lda /$D100 - jsr X.Unpak.XatYA + jsr X.Unpak.XatYAX lda #$EE byte to distinguish LC bank 2 sta $D000 *-------------------------------------- -LDR.LCBNK1 lda RRAMWRAMBNK1 switch in LC bank 1 - lda RRAMWRAMBNK1 +LDR.LCBNK1 lda IO.RRAMWRAMBNK1 switch in LC bank 1 + lda IO.RRAMWRAMBNK1 rts *-------------------------------------- DS121x.DATA1 .EQ idxl -DS121x.DATA2 .EQ A1L +DS121x.DATA2 .EQ ZP.A1L *-------------------------------------- LDR.ClkDevScan jsr LDR.IsIIc bcc LDR.ClkDevNCLK //c only @@ -416,19 +426,20 @@ LDR.ClkDevDCLK php cld lda #'D' - ldx PAKME.DCLK - ldy PAKME.DCLK+1 + ldx #PAKME.DCLK.ID jmp LDR.SetupCLK .9 cld *-------------------------------------- +NSC.IOBASE .EQ $C300 +*-------------------------------------- LDR.ClkDevNCLK php sei - lda RDCXROM + lda IO.RDCXROM php - sta SETCXROM + sta IO.SETCXROM sta NSC.IOBASE * lda $C00B Workaround for Ultrawarp bug @@ -489,7 +500,7 @@ LDR.ClkDevNCLK php plp bmi .8 - sta CLRCXROM + sta IO.CLRCXROM .8 plp *-------------------------------------- @@ -505,8 +516,7 @@ LDR.ClkDevNCLK php bra LDR.ClkDevTCLK .90 lda #'N' - ldx PAKME.NCLK - ldy PAKME.NCLK+1 + ldx #PAKME.NCLK.ID bra LDR.SetupCLK *-------------------------------------- LDR.ClkDevTCLK jsr LDR.IsIIc @@ -538,8 +548,7 @@ LDR.ClkDevTCLK jsr LDR.IsIIc lda $c080,x lda #'T' - ldx PAKME.TCLK - ldy PAKME.TCLK+1 + ldx #PAKME.TCLK.ID jsr LDR.SetupCLK lda idxl+1 @@ -554,7 +563,7 @@ LDR.ClkDevTCLK jsr LDR.IsIIc cmp #$C8 bne .1 *-------------------------------------- -LDR.ClkDevXCLK bit RROMBNK2 +LDR.ClkDevXCLK bit IO.RROMBNK2 sta $C070 bit $FACA bit $FACA @@ -573,94 +582,95 @@ LDR.ClkDevXCLK bit RROMBNK2 .1 bit $F851 lda #'X' - ldx PAKME.XCLK - ldy PAKME.XCLK+1 + ldx #PAKME.XCLK.ID *-------------------------------------- -LDR.SetupCLK stx ZPInBufPtr - sty ZPInBufPtr+1 - - sta LDR.MSG.CLK +LDR.SetupCLK sta LDR.MSG.CLK + phx + ldx #LDR.MSG.CLK jsr LDR.PrintX jsr LDR.LCBNK1 + + plx - lda #$D742 - sta ZPOutBufPtr - lda /$D742 - sta ZPOutBufPtr+1 - jsr X.Unpak + ldy #CLK + lda /CLK + jsr X.Unpak.XatYAX lda #$4C enable clock routine by putting a jmp - sta clockv in front of clock vector + sta GP.CLOCK in front of clock vector lda #MACHID.CLK - tsb MACHID + tsb GP.MACHID LDR.SetupCLK.RTS rts *-------------------------------------- -LDR.SetupRAM lda DEVCNT + .DO M.RAM=1 + +LDR.SetupRAM lda GP.DEVCNT cmp #13 bcs LDR.SetupCLK.RTS jsr LDR.LCBNK1 - ldx #PAKME.RAM-PAKME.Table - ldy #$FF00 - lda /$FF00 - jsr X.Unpak.XatYA + ldx #PAKME.RAM.ID + ldy #RAM + lda /RAM + jsr X.Unpak.XatYAX lda RAMX.PAK bne .1 - sta SETWRITEAUX + sta IO.SETWRITEAUX - ldx #PAKME.RAMX-PAKME.Table - ldy #$0200 - lda /$0200 + ldx #PAKME.RAMX.ID + ldy #RAMX + lda /RAMX jsr X.Unpak.XatYA bra .7 -.1 ldx #PAKME.RAMX-PAKME.Table +.1 ldx #PAKME.RAMX.ID ldy #$0800 lda /$0800 jsr X.Unpak.XatYA - sta SETWRITEAUX + sta IO.SETWRITEAUX ldx #$FE .2 lda $900,x - sta $300,x + sta RAMX+$100,x dex txa bne .2 .3 lda $800,x - sta $200,x + sta RAMX,x inx bne .3 -.7 sta CLRWRITEAUX +.7 sta IO.CLRWRITEAUX - lda #RAMDRV put driver address into - sta DEVPTRS3D2 - lda /RAMDRV - sta DEVPTRS3D2+1 + lda #RAM put driver address into + sta GP.DEVPTRS3D2 + lda /RAM + sta GP.DEVPTRS3D2+1 - inc DEVCNT count (-1) active devices - ldx DEVCNT + inc GP.DEVCNT count (-1) active devices + ldx GP.DEVCNT lda #$BF unit num of /RAM - sta DEVLST,x + sta GP.DEVLST,x ldx #LDR.MSG.RAM jmp LDR.PrintX + .FIN *-------------------------------------- * find all disk devices in system slots and set up address * and device table in prodos global page. *-------------------------------------- -LDR.BlkDevScan bit RROMBNK2 write protect lc ram. +LDR.BlkDevScan bit IO.RROMBNK2 write protect lc ram. stz idxl lda #$C7 search slots from high to low @@ -680,9 +690,9 @@ LDR.BlkDevScan bit RROMBNK2 write protect lc ram. bne .2 branch if 16 sector disk II. sta devid =0 since disk ii's have null attributes - lda #XRW.START + lda #XRW sta LDR.driveradr - lda /XRW.START + lda /XRW sta LDR.driveradr+1 sec 2 devices jsr LDR.AddBlkDevs @@ -776,16 +786,16 @@ LDR.AddSPDevs jsr LDR.SetDevID setup the devid byte from attributes asl asl asl - sta unitnum unit number + sta ZP.UNITNUM - stz A4L force a prodos status call + stz ZP.CMDNUM force a prodos status call - stz buf dummy pointer + stz ZP.BUFPTR dummy pointer lda #$10 - sta buf+1 dummy pointer should be <> 0 + sta ZP.BUFPTR+1 dummy pointer should be <> 0 - stz bloknml # of bytes to transfer - stz bloknml+1 + stz ZP.BLKNUM # of bytes to transfer + stz ZP.BLKNUM+1 .1 jsr $0000 SELF MODIFIED @@ -839,9 +849,9 @@ LDR.AddBlkDevs php how many drives (carry). asl in high nibble. ora devid combine with attributes. - ldx DEVCNT + ldx GP.DEVCNT inx put device # into device list. - sta DEVLST,x + sta GP.DEVLST,x asl now form drive 2 device number, if any. plp restore # of devices in carry. @@ -849,21 +859,21 @@ LDR.AddBlkDevs php how many drives (carry). bpl .1 branch if a 1 drive device (e.g. hard drive) inx else presume that 2nd drive is present. - sta DEVLST,x active device list. + sta GP.DEVLST,x active device list. -.1 stx DEVCNT save updated device count. +.1 stx GP.DEVCNT save updated device count. asl shift # of drives back into carry. lda LDR.driveradr get high address of device driver. - sta DEVPTRS,y device driver table 1. + sta GP.DEVPTRS,y device driver table 1. bcc .2 branch if single drive. - sta DEVPTRS+16,y device driver table 2. + sta GP.DEVPTRS+16,y device driver table 2. .2 lda LDR.driveradr+1 - sta DEVPTRS+1,y + sta GP.DEVPTRS+1,y bcc .3 - sta DEVPTRS+17,y + sta GP.DEVPTRS+17,y .3 LDR.AddBlkDevs.RTS @@ -895,22 +905,22 @@ LDR.AddExtraBLKDevs ora #$10 tay - lda DEVPTRS,y device driver table 1 - cmp #nodevice + lda GP.DEVPTRS,y device driver table 1 + cmp #XDOS.NoDevice bne .10 - lda DEVPTRS+1,y - cmp /nodevice + lda GP.DEVPTRS+1,y + cmp /XDOS.NoDevice bne .10 Drive 1 & 2 free - jsr LDR.AddY2DEVLST Y = index in DEVPTRS + jsr LDR.AddY2DEVLST Y = index in GP.DEVPTRS jsr .8 tya and #$F tay -.4 jsr LDR.AddY2DEVLST Y = index in DEVPTRS +.4 jsr LDR.AddY2DEVLST Y = index in GP.DEVPTRS .8 phy @@ -919,9 +929,9 @@ LDR.AddExtraBLKDevs lda (idxl),y BLK entry point ply - sta DEVPTRS,y + sta GP.DEVPTRS,y lda idxl+1 - sta DEVPTRS+1,y + sta GP.DEVPTRS+1,y * clc @@ -979,14 +989,14 @@ LDR.AddExtraSPDevs lda LDR.SPVect+2 sta XDOS.SPVectHi-1,x - bit RROMBNK2 write protect lc ram. + bit IO.RROMBNK2 write protect lc ram. jsr LDR.AddY2DEVLST lda #XDOS.SPREMAP - sta DEVPTRS,y + sta GP.DEVPTRS,y lda /XDOS.SPREMAP - sta DEVPTRS+1,y + sta GP.DEVPTRS+1,y .2 inc LDR.SPStatus.U @@ -1009,7 +1019,7 @@ LDR.CheckTClkID ldy #6 LDR.CheckDiskID ldy #5 - lda CLRC8ROM switch out $C8 ROMs + lda IO.CLRC8ROM switch out $C8 ROMs .1 lda (idxl),y compare id bytes cmp dskid,y @@ -1025,7 +1035,7 @@ LDR.CheckDiskID ldy #5 .8 ldx LDR.SlotIdx lda sltbit-1,x - tsb rommap mark bit to flag rom present + tsb GP.SLTBYT mark bit to flag rom present .9 plp rts @@ -1048,12 +1058,12 @@ LDR.FindFreeDevPtr LDR.FindFreeDevPtrNext .1 ldy LDR.DEVPTRS.IDX,x - lda DEVPTRS,y device driver table 1 - cmp #nodevice + lda GP.DEVPTRS,y device driver table 1 + cmp #XDOS.NoDevice bne .2 - lda DEVPTRS+1,y - cmp /nodevice + lda GP.DEVPTRS+1,y + cmp /XDOS.NoDevice beq .8 .2 dex @@ -1075,8 +1085,8 @@ LDR.SetDevID ldy #$FE check attributes byte. sta devid rts *-------------------------------------- -LDR.AddY2DEVLST inc DEVCNT - ldx DEVCNT +LDR.AddY2DEVLST inc GP.DEVCNT + ldx GP.DEVCNT tya asl convert to DSSS0000 @@ -1084,7 +1094,7 @@ LDR.AddY2DEVLST inc DEVCNT asl ora devid include device attributes - sta DEVLST,x in the active device list. + sta GP.DEVLST,x in the active device list. rts *-------------------------------------- @@ -1096,7 +1106,7 @@ LDR.Scr80Init phx Save LDR.MSG php sei - sta SETC3ROM + sta IO.SETC3ROM ldx #COL80IDX.Cnt-1 @@ -1113,23 +1123,23 @@ LDR.Scr80Init phx Save LDR.MSG cmp #$80 beq .3 -.2 sta CLRC3ROM +.2 sta IO.CLRC3ROM .3 plp *-------------------------------------- LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME) jsr $C300 - jsr setnorm - jsr home - jsr SETINV + jsr ROM.SETNORM + jsr ROM.HOME + jsr ROM.SETINV - .DO LOGO + .DO LOGO=1 lda #20 - sta CV + sta ZP.CV inc - sta WNDTOP - jsr VTAB + sta ZP.WNDTOP + jsr ROM.TABV lda #LOGO.PAKED sta ZPInBufPtr @@ -1142,17 +1152,17 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME) jsr X.Unpak - sta CLRHIRES - sta SETMIXED + sta IO.CLRHIRES + sta IO.SETMIXED - bit RDIOUDIS - sta SETIOUDIS - sta SETDHIRES + bit IO.RDIOUDIS + sta IO.SETIOUDIS + sta IO.SETDHIRES bmi .10 - sta CLRIOUDIS + sta IO.CLRIOUDIS -.10 sta CLRTEXT +.10 sta IO.CLRTEXT stz ZPPtr1 lda #$A0 @@ -1162,7 +1172,7 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME) .1 pha - jsr GBSCALC + jsr ROM.GBSCALC ldy #0 @@ -1173,8 +1183,8 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME) tax lda PALETTE.AUX,x - sta SETPAGE2 - sta (GBASL),y + sta IO.SETPAGE2 + sta (ZP.GBASL),y pla lsr @@ -1183,8 +1193,8 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME) lsr tax lda PALETTE.MAIN,x - sta CLRPAGE2 - sta (GBASL),y + sta IO.CLRPAGE2 + sta (ZP.GBASL),y iny cpy #40 @@ -1210,9 +1220,9 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME) asl asl asl - sta SETPAGE2 - ora (GBASL),y - sta (GBASL),y + sta IO.SETPAGE2 + ora (ZP.GBASL),y + sta (ZP.GBASL),y pla lsr @@ -1225,9 +1235,9 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME) asl asl asl - sta CLRPAGE2 - ora (GBASL),y - sta (GBASL),y + sta IO.CLRPAGE2 + ora (ZP.GBASL),y + sta (ZP.GBASL),y iny cpy #40 @@ -1248,37 +1258,37 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME) .FIN - jsr CLREOL - jsr setnorm + jsr ROM.CLREOL + jsr ROM.SETNORM ldx #LDR.MSG.PRODOS jsr LDR.PrintX plx get back LDR.MSG.machine type *-------------------------------------- -LDR.PrintX bit RROMBNK2 +LDR.PrintX bit IO.RROMBNK2 - lda INVFLG + lda ZP.INVFLG pha - jsr SETINV + jsr ROM.SETINV .1 lda $2000,x pha ora #$80 - jsr COUT + jsr ROM.COUT inx pla bpl .1 lda #$A0 - jsr COUT + jsr ROM.COUT pla - sta INVFLG - sta CLRPAGE2 for screen holes proper access + sta ZP.INVFLG + sta IO.CLRPAGE2 for screen holes proper access rts *-------------------------------------- -LDR.IsIIc lda MACHID +LDR.IsIIc lda GP.MACHID and #MACHID.T cmp #MACHID.T.IIc beq .9 @@ -1294,11 +1304,11 @@ PALETTE.AUX .HS 00.01.02.03.04.05.06.07 *-------------------------------------- * 16 bytes moved to $03F0 vectors *-------------------------------------- -LDR.3F0 .DA breakv - .DA oldrst +LDR.3F0 .DA ROM.BREAKV + .DA ROM.OLDRST .DA #$5A powerup byte - jmp oldrst '&' vector - jmp oldrst ctrl-y vector + jmp ROM.OLDRST '&' vector + jmp ROM.OLDRST ctrl-y vector .HS 004000 .DA GP.IRQV global page interrupt vector *-------------------------------------- @@ -1380,10 +1390,10 @@ COL80VAL .HS 3818012C *-------------------------------------- LDR.MLIOL.P .DA #2 .DA #$60 - .DA pbuf+1 + .DA LDR.PBuf+1 LDR.MLISETP.P .DA #1 - .DA pbuf + .DA LDR.PBuf LDR.SPStatus.P .DA #$03 # of parms LDR.SPStatus.U .DA #$00 unit number (code for smartport stat) @@ -1419,5 +1429,5 @@ LDR.SlotDevCnt .BS 7 *-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.ldr -LOAD usr/src/prodos.fx/prodos.s +LOAD usr/src/prodos.fx/pdos8m.s ASM diff --git a/ProDOS.FX/ProDOS.S.NCLK.txt b/ProDOS.FX/ProDOS.S.NCLK.txt index e33429f2..f4d44026 100644 --- a/ProDOS.FX/ProDOS.S.NCLK.txt +++ b/ProDOS.FX/ProDOS.S.NCLK.txt @@ -7,13 +7,15 @@ NEW *-------------------------------------- DS1216E.DATA .EQ $200 Reverted YY MM DD Day HH mm SS CS *-------------------------------------- -NCLK.START php +NCLK.START .PH CLK + +NCLK.START1 php sei NO IRQ !!! - lda RDCXROM + lda IO.RDCXROM php - sta SETCXROM + sta IO.SETCXROM sta NSC.IOBASE * lda $C00B Workaround for Ultrawarp bug @@ -86,31 +88,33 @@ NCLK.START php asl asl ora DS1216E.DATA+2 Get DD - sta DATELO + sta GP.DATE * lda DS1216E.DATA Get YY pla rol - sta DATELO+1 + sta GP.DATE+1 lda DS1216E.DATA+5 Get mm - sta TIMELO + sta GP.TIME lda DS1216E.DATA+4 Get HH - sta TIMELO+1 + sta GP.TIME+1 plp bmi .8 - sta CLRCXROM + sta IO.CLRCXROM .8 plp rts *-------------------------------------- DS1216E.SIG .HS 5CA33AC55CA33AC5 Reverted 7->0 *-------------------------------------- - .LIST ON + .EP +*-------------------------------------- +* .LIST ON NCLK.LEN .EQ *-NCLK.START .LIST OFF *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.RAM.txt b/ProDOS.FX/ProDOS.S.RAM.txt index c7d3357b..29b01b07 100644 --- a/ProDOS.FX/ProDOS.S.RAM.txt +++ b/ProDOS.FX/ProDOS.S.RAM.txt @@ -1,10 +1,12 @@ NEW AUTO 3,1 -RAM.START -RAMDRV cld no decimal. +*-------------------------------------- +RAM.START .PH RAM + +RAM.START1 cld no decimal. ldx #$0B save 13 bytes of parms -.1 lda A1L,x +.1 lda ZP.A1L,x sta a1l1,x dex bpl .1 @@ -16,34 +18,34 @@ RAMDRV cld no decimal. dex bpl .2 - lda A4L get command. + lda ZP.CMDNUM beq stat 0 = status cmp #$04 check for command too high. bcs ioerr if it is, i/o error eor #$03 - sta A4L 0=format, 2=read, 1=write + sta ZP.CMDNUM 0=format, 2=read, 1=write beq format - ldy bloknml+1 check for large block number. + ldy ZP.BLKNUM+1 check for large block number. bne ioerr too big. - lda bloknml block # + lda ZP.BLKNUM block # bmi ioerr largest block number is $7F * at this point, control is passed to the code in the alternate 64k. * it it used for read, write and format. after the request is completed, * control is passed back to 'noerr'. -format lda #RAMXDRV card entry point +format lda #RAMX card entry point sta passit - lda /RAMXDRV + lda /RAMX gocard sta passit+1 also used by 'mainwrt' sec direction ram -> card clv start with original zero page - jmp xfer transfer control + jmp ROM.XFER transfer control ioerr lda #$27 bne H2D41 @@ -62,7 +64,7 @@ H2D47 php save status ldx #$0B restore 13 byes of parms H2D4B lda a1l1,x - sta A1L,x + sta ZP.A1L,x dex bpl H2D4B @@ -75,28 +77,30 @@ H2D4B lda a1l1,x plp and status. rts -mainwrt sta SETWRITEAUX write to alt 48K +mainwrt sta IO.SETWRITEAUX write to alt 48K ldy #$00 -H2D6A lda (A1L),y pointers set in card by 'setptr' - sta (A4L),y - lda (A2L),y - sta (A3L),y +H2D6A lda (ZP.A1L),y pointers set in card by 'setptr' + sta (ZP.A4L),y + lda (ZP.A2L),y + sta (ZP.A3L),y dey bne H2D6A - sta CLRWRITEAUX write to main 48K. + sta IO.CLRWRITEAUX write to main 48K. lda #donewrt done writing card sta passit lda /donewrt jmp gocard *-------------------------------------- -RAM.LEN .EQ *-RAM.START - .DUMMY sp1 .HS 0000 -a1l1 .BS 13 13 bytes of storage +a1l1 .BS 13 13 bytes of storage .ED +*-------------------------------------- + .EP +*-------------------------------------- +RAM.LEN .EQ *-RAM.START *-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.ram diff --git a/ProDOS.FX/ProDOS.S.RAMX.txt b/ProDOS.FX/ProDOS.S.RAMX.txt index 5377e924..bc206d56 100644 --- a/ProDOS.FX/ProDOS.S.RAMX.txt +++ b/ProDOS.FX/ProDOS.S.RAMX.txt @@ -1,12 +1,15 @@ NEW AUTO 3,1 -* object code = ram_0 +*-------------------------------------- +RAMX.DBuf .EQ $0C00 +RAMX.vblock1 .EQ $0E00 ramdisk directory block +*-------------------------------------- * /RAM driver (aux bank portion) * this code is packed into $200 length with no room for expansion !! * (see note at end of this obj) * after the main /RAM routine has determined that the command is ok and the -* block to be read/written is within range, it transfers control to this +* block to be read/written is within range, it transfers control to this * aux /RAM routine which remaps the block requested as follows: * request blocks 0,1: invalid * 2: returns VDIR (card block 3) @@ -15,13 +18,16 @@ NEW * $05-$5F: returns card blocks $05-$5F * $60-$67: returns blocks $68-$7F in bank 1 of language card * $68-$7F: returns blocks $68-$7F in bank 2 of language card +*-------------------------------------- +RAMX.START .PH RAMX -RAMX.START lda RD80STORE read 80 store +RAMX.START1 lda IO.RD80STORE read 80 store pha save for later - sta CLR80STORE turn off 80 store + sta IO.CLR80STORE turn off 80 store + ldx #$04 move the parameters for use: -L5109 lda A4L,x cmd, unit, bufptr and block (lo) +L5109 lda ZP.CMDNUM,x cmd, unit, bufptr and block (lo) sta tcmd,x -> tcmd, tunit, R2L, R2H, R01 dex bpl L5109 @@ -29,13 +35,13 @@ L5109 lda A4L,x cmd, unit, bufptr and block (lo) and formatflg format the volume first time bne L514F thru, or when requested. - ldx bloknml save R01 during format. - lda /vblock1 block to be cleared. + ldx ZP.BLKNUM save R01 during format. + lda /RAMX.vblock1 block to be cleared. jsr clrbuf1 clears all buffers. ldy #$03 format volume in 2 chunks. L511F lda VDIR,y - sta vblock1+4,y + sta RAMX.vblock1+4,y dey bpl L511F @@ -52,7 +58,7 @@ L5130 sta BITMAP,y ldy #$07 do other chunk L513B lda access,y - sta vblock1+34,y + sta RAMX.vblock1+34,y dey bpl L513B @@ -93,29 +99,29 @@ lcrd txa get R1 back ora #$10 in secondary bank. bne L5179 branch always. -L5173 sta RRAMWRAMBNK2 turn on main $D000 - sta RRAMWRAMBNK2 +L5173 sta IO.RRAMWRAMBNK2 turn on main $D000 + sta IO.RRAMWRAMBNK2 L5179 sta R01 restore R1. lda R2H save R2 for later pha ldx R2L - sta SETALTZP use alternate zero page/stack - lda /dbuf set R2 to dbuf + sta IO.SETALTZP use alternate zero page/stack + lda /RAMX.DBuf set R2 to dbuf sta R2H - lda #dbuf + lda #RAMX.DBuf sta R2L jsr setptr set pointers tay A > 0 from setptr -L5194 lda (A1L),y move A1,A2 to A4,A3 - sta (A4L),y - lda (A2L),y - sta (A3L),y +L5194 lda (ZP.A1L),y move A1,A2 to A4,A3 + sta (ZP.A4L),y + lda (ZP.A2L),y + sta (ZP.A3L),y dey bne L5194 - sta CLRALTZP use main zero page/stack + sta IO.CLRALTZP use main zero page/stack L51A2 stx R2L pla restore R2 @@ -123,8 +129,8 @@ L51A2 stx R2L plp get direction. L51AA bcs L51B5 write, done with move. - sta RRAMWRAMBNK1 switch in MLI part of LC - sta RRAMWRAMBNK1 + sta IO.RRAMWRAMBNK1 switch in MLI part of LC + sta IO.RRAMWRAMBNK1 jsr blockdo0 read, transfer dbuf to main L51B5 jmp exitcard @@ -138,24 +144,24 @@ L51B8 jsr blockdo0 transfer main to dbuf. * language card, so the language card is always switched in. if cmd is 2, a * write is done (R2->R1); if cmd is 1, a read is done (R1->R2). -blockdo0 lda /dbuf set up R1 = dbuf +blockdo0 lda /RAMX.DBuf set up R1 = dbuf blockdo1 sta R01 blockdo jsr setptr set pointers. bcs L51DB it's a write. - sta CLRWRITEAUX transfer buffer directly to main. + sta IO.CLRWRITEAUX transfer buffer directly to main. tay 0 left from setptr. -L51CC lda (A1L),y transfer A1,A2 to A4,A3 - sta (A4L),y - lda (A2L),y - sta (A3L),y +L51CC lda (ZP.A1L),y transfer A1,A2 to A4,A3 + sta (ZP.A4L),y + lda (ZP.A2L),y + sta (ZP.A3L),y dey bne L51CC - sta SETWRITEAUX back the way it was. + sta IO.SETWRITEAUX back the way it was. donewrt rts mainwrt returns here @@ -171,34 +177,34 @@ setptr lda tcmd is it read or write ? bcs L5208 taken if write. lda R2H destination page - sta A4L+1 - sta A3L+1 + sta ZP.A4L+1 + sta ZP.A3L+1 lda R2L - sta A4L - sta A3L + sta ZP.A4L + sta ZP.A3L lda R01 source page - sta A1L+1 - sta A2L+1 + sta ZP.A1L+1 + sta ZP.A2L+1 lda #$00 source page aligned - sta A1L - sta A2L + sta ZP.A1L + sta ZP.A2L beq L5223 L5208 lda R2H source page - sta A1L+1 - sta A2L+1 + sta ZP.A1L+1 + sta ZP.A2L+1 lda R2L - sta A1L - sta A2L + sta ZP.A1L + sta ZP.A2L lda R01 destination page - sta A4L+1 - sta A3L+1 + sta ZP.A4L+1 + sta ZP.A3L+1 lda #$00 destination page aligned - sta A4L - sta A3L + sta ZP.A4L + sta ZP.A3L -L5223 inc A2L+1 - inc A3L+1 +L5223 inc ZP.A2L+1 + inc ZP.A3L+1 rts * tzip is called if blocks 0,1,4,5 are requested. @@ -211,15 +217,15 @@ tzip jsr clrbuf0 fill dbuf with 0's * clrbuf fills the buffer indicated by R01 to 0's. * should only be called on a read or format. -clrbuf0 lda /dbuf dbuf is temp buffer. +clrbuf0 lda /RAMX.DBuf dbuf is temp buffer. clrbuf1 sta R01 assign to block. clrbuf2 jsr setptr set pointers tay acc = 0 -L523A sta (A1L),y - sta (A2L),y +L523A sta (ZP.A1L),y + sta (ZP.A2L),y dey bne L523A @@ -239,7 +245,7 @@ L524A cmp #$0F if any page < $F (block 8) requested, bcc tzip it is invalid. ldx #$00 x = # of iterations. - lda bloknml use true block #. + lda ZP.BLKNUM use true block #. cmp #$5D beyond 8k blocks ? bcc L525B no, do normal @@ -302,7 +308,7 @@ times2 asl acc = 2 * acc * 16 bytes long; the rest of the block is synthesized. the temporary buffer * at $800 is used to build/read a full size bitmap block. -tbmap lda /dbuf use temp buffer as block +tbmap lda /RAMX.DBuf use temp buffer as block sta R01 jsr setptr set pointers, test read/write. bcs L52A9 branch if it's write. @@ -311,7 +317,7 @@ tbmap lda /dbuf use temp buffer as block ldy #$0F put real bitmap there L529B lda BITMAP,y - sta (A1L),y + sta (ZP.A1L),y dey bpl L529B @@ -322,7 +328,7 @@ L52A9 jsr blockdo move user buf to temp buf jsr setptr ldy #$0F move temp buf to bitmap. -L52B1 lda (A4L),y (pointer set by setptr) +L52B1 lda (ZP.A4L),y (pointer set by setptr) sta BITMAP,y dey bpl L52B1 @@ -339,8 +345,10 @@ BITMAP .HS 00FFFFFF blocks 0-7 used .HS FFFFFFFF .HS FFFFFFFF .HS FFFFFFFE block 127 used (IRQV) + VDIR .HS F3 storage type = F, name length = 3 .AS "RAM" + access .DA #$C3 destroy, rename, read enabled .HS 27 entry length .HS 0D @@ -348,24 +356,28 @@ access .DA #$C3 destroy, rename, read enabled .HS 0300 block 3 .DA #128 128 blocks -exitcard lda RRAMWRAMBNK1 restore language card - lda RRAMWRAMBNK1 +exitcard lda IO.RRAMWRAMBNK1 restore language card + lda IO.RRAMWRAMBNK1 pla get 80store bpl L52EA 80store wasn't on - sta SET80STORE enable 80store + sta IO.SET80STORE enable 80store L52EA jmp bypass jump around passit passit .HS 0000 + bypass lda #noerr set up return to noerr sta passit lda /noerr ex1 sta passit+1 also used by blockwrite clc transfer card to main clv use standard zeropage/stack - jmp xfer jmp back from language card. + jmp ROM.XFER jmp back from language card. +*-------------------------------------- + .EP *-------------------------------------- RAMX.LEN .EQ *-RAMX.START +*-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.ramx LOAD usr/src/prodos.fx/prodos.s diff --git a/ProDOS.FX/ProDOS.S.SEL1.txt b/ProDOS.FX/ProDOS.S.SEL1.txt index 6a9473d5..ed211a8f 100644 --- a/ProDOS.FX/ProDOS.S.SEL1.txt +++ b/ProDOS.FX/ProDOS.S.SEL1.txt @@ -19,8 +19,10 @@ SEL1.DirBlk .EQ $1C00 512b SEL1.filetypes .EQ $1F00 SEL1.Filenames .EQ $2000 *-------------------------------------- -SEL1.START cld - bit RROMBNK2 read ROM +SEL1.START .PH $1000 + +SEL1.START1 cld + bit IO.RROMBNK2 read ROM lda #$A0 jsr $C300 initialize 80 column text card @@ -32,11 +34,11 @@ SEL1.START cld stz SEL1.BSPathBuf *-------------------------------------- - ldx DEVCNT + ldx GP.DEVCNT -.1 lda DEVLST,x +.1 lda GP.DEVLST,x and #$F0 - cmp DEVNUM + cmp GP.DEVNUM beq SEL1.GetVol dex @@ -45,16 +47,16 @@ SEL1.START cld SEL1.NextVol ldx VolListPtr get device list pointer. bne .1 - ldx DEVCNT get device count. + ldx GP.DEVCNT get device count. inx .1 dex - lda DEVLST,x get unit number from list. + lda GP.DEVLST,x get unit number from list. *-------------------------------------- SEL1.GetVol stx VolListPtr sta SEL1.OnLineP+1 store unit number for online. jsr MLI - .DA #MLIONLINE + .DA #MLI.ONLINE .DA SEL1.OnLineP bcs SEL1.NextVol error check. @@ -73,14 +75,14 @@ SEL1.OpenDir stx SEL1.PathBuf save the name length sta SEL1.PathBuf,x after name. jsr MLI - .DA #MLIOPEN + .DA #MLI.OPEN .DA SEL1.OpenP bcc SEL1.EnumDir good open. lda bInSubDir trying to open root directory ? beq SEL1.NextVol yes, just move to next volume. - jsr bell1 no, generate bell tone + jsr ROM.BELL1 no, generate bell tone jsr SEL1.FullPath.. and stay at same level. stx SEL1.PathBuf jmp SEL1.KeyLoop @@ -98,7 +100,7 @@ SEL1.EnumDir stz filecount zero file count. sta SEL1.ReadP+5 SEL1.EnumBlk jsr MLI - .DA #MLIREAD + .DA #MLI.READ .DA SEL1.ReadP bcs SEL1.CloseDir @@ -147,14 +149,14 @@ SEL1.EnumDirNext bne SEL1.EnumDirNext *-------------------------------------- SEL1.CloseDir jsr MLI close directory file - .DA #MLICLOSE + .DA #MLI.CLOSE .DA SEL1.CloseP - jsr settxt use full screen for windows - jsr home + jsr ROM.SETTXT use full screen for windows + jsr ROM.HOME lda #$17 cursor at bottom of screen. - jsr TABV set vertical position. + jsr ROM.TABV set vertical position. ldy #SEL1.RetIcon-SEL1.Strings jsr SEL1.IconOutY @@ -163,7 +165,7 @@ SEL1.CloseDir jsr MLI close directory file jsr SEL1.MsgOutY lda #$99 - jsr cout cursor to upper/left. + jsr ROM.COUT cursor to upper/left. ldx #$00 ldy SEL1.PathBuf @@ -186,10 +188,10 @@ SEL1.CloseDir jsr MLI close directory file ldx #20 limit to 20 files on the screen. .3 lda #2 set window dimensions - sta wndtop + sta ZP.WNDTOP lda #22 - sta wndbot + sta ZP.WNDBOT .4 phx @@ -208,12 +210,12 @@ SEL1.Up jsr SEL1.PrintFN print old name in normal. beq L5EAA if already at the top name dec SelectedIndex - lda cv current cursor line. - cmp #$02 at top line of window ? + lda ZP.CV current cursor line. + cmp #2 at top line of window ? bne L5EAA no, move up normally. dec ScrollIndex fix offset index - lda #$16 else sroll windows down a line. + lda #22 else sroll windows down a line. bne SEL1.Scroll branch always. *-------------------------------------- SEL1.Down jsr SEL1.PrintFN print old name in normal. @@ -223,21 +225,21 @@ SEL1.Down jsr SEL1.PrintFN print old name in normal. bcs L5EAA if already at last filename stx SelectedIndex - lda cv current cursor line. - cmp #$15 at bottom line of window ? + lda ZP.CV current cursor line. + cmp #21 at bottom line of window ? bne L5EAA no, move cursor normally. inc ScrollIndex update offset index - lda #$17 else scroll up a line. + lda #23 else scroll up a line. -SEL1.Scroll jsr cout +SEL1.Scroll jsr ROM.COUT L5EAA jsr SEL1.PrintFNInv output last filename. *-------------------------------------- -SEL1.KeyLoop lda kbd get keyboard input. +SEL1.KeyLoop lda IO.KBD get keyboard input. bpl SEL1.KeyLoop loop until key pressed. - sta KBDSTROBE clear strobe. + sta IO.KBDSTROBE clear strobe. ldx filecount are any files displayed ? beq .1 no, don't accept arrow keys or return. @@ -289,7 +291,7 @@ SEL1.CR ldy SelectedIndex bcs L5EED jsr MLI open file - .DA #MLIOPEN + .DA #MLI.OPEN .DA SEL1.OpenP bcs L5EED @@ -300,11 +302,11 @@ SEL1.CR ldy SelectedIndex sta SEL1.ReadP+5 max $9F00 jsr MLI - .DA #MLIREAD + .DA #MLI.READ .DA SEL1.ReadP php save possible error. jsr MLI close file. ignore any error from close - .DA #MLICLOSE + .DA #MLI.CLOSE .DA SEL1.CloseP plp restore status from read. bcs L5EED if any errors. @@ -319,10 +321,10 @@ SEL1.CR ldy SelectedIndex dex bpl .7 -.8 jsr settxt reset to full window. - jsr home makes for no flash. +.8 jsr ROM.SETTXT reset to full window. + jsr ROM.HOME makes for no flash. lda #$95 ctrl-u - jsr cout turn off 80 columns. + jsr ROM.COUT turn off 80 columns. jmp $2000 execute selected system file. *-------------------------------------- @@ -337,12 +339,12 @@ SEL1.PrintFNInv lda #$0F sbc ScrollIndex calculate line # to display name inc inc - jsr TABV set vertical position. + jsr ROM.TABV set vertical position. lda #$01 - sta ch80col + sta ROM.OURCH - lda SEL1.filetypes,x get filetype (x is unchanged by tabv). + lda SEL1.filetypes,x get filetype (x is unchanged by ROM.TABV). jsr SEL1.CheckType bmi .1 @@ -353,10 +355,10 @@ SEL1.PrintFNInv lda #$0F .1 jsr SEL1.SetFNPtrX calc name location. lda #$05 - sta ch80col + sta ROM.OURCH pla normal / inverse - jsr cout + jsr ROM.COUT jsr SEL1.SPOut output a space. @@ -375,11 +377,11 @@ SEL1.PrintFNInv lda #$0F * bne .3 jsr SEL1.SPOut - jmp setnorm set normal text mode. + jmp ROM.SETNORM set normal text mode. *-------------------------------------- SEL1.SetFullPath jsr MLI - .DA #MLISETPREFIX + .DA #MLI.SETPREFIX .DA SEL1.SetPrefixP bcs .9 @@ -456,7 +458,7 @@ SEL1.IconOutY phx .1 lda SEL1.MouseText,x - jsr cout + jsr ROM.COUT inx cpx #2 bne .2 @@ -481,7 +483,7 @@ SEL1.MsgOutY lda SEL1.Strings,y SEL1.SPOut lda #' ' SPACE SEL1.COut ora #$80 set high bit. - jmp cout output to screen. + jmp ROM.COUT output to screen. *-------------------------------------- * data area *-------------------------------------- @@ -529,7 +531,9 @@ SEL1.SetPrefixP .DA #1 Param Count SEL1.ReadP .DA #4 Param Count .HS 01 reference number *-------------------------------------- - .LIST ON + .EP +*-------------------------------------- +* .LIST ON SEL1.LEN .EQ *-SEL1.START .LIST OFF *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.SEL2.txt b/ProDOS.FX/ProDOS.S.SEL2.txt index 72128a3c..d60e3a3f 100644 --- a/ProDOS.FX/ProDOS.S.SEL2.txt +++ b/ProDOS.FX/ProDOS.S.SEL2.txt @@ -1,7 +1,13 @@ NEW AUTO 3,1 -* object code = sel_2 -* +*-------------------------------------- +SEL2.PBuf .EQ $0280 prefix buffer +SEL2.VBuf .EQ $0F00 volume buffer +SEL2.FBuf .EQ $1C00 open file buffer (selector) +*-------------------------------------- +SEL2.SYSLoad .EQ $2000 .SYS file load address + +*-------------------------------------- * Alternate program selector segment for P8 when used in conjunction with * gs/os. This code is used in place of the standard P8 interactive program * selector when P8 is started up by GQuit. It is called when passing control @@ -12,12 +18,10 @@ NEW * the freshly loaded app. This code does NOT start with a CLD instruction * (as other replacement quit code is supposed to do) because GQuit checks * this to see if this version of quit code is available. +*-------------------------------------- +SEL2.START .PH $1000 -op_buf .EQ $1C00 open file buffer (selector) - - -SEL2.START -GQdisp lda RRAMWRAMBNK1 read/write LC bank 1 +SEL2.START1 lda IO.RRAMWRAMBNK1 read/write LC bank 1 clc xce 16 bit native mode. jmp P8QUIT go to GQuit. @@ -44,7 +48,7 @@ GQdisp lda RRAMWRAMBNK1 read/write LC bank 1 >SHORTM 8 bit accumulator pha save the switch status. - ldx ##inbuf point to passed prefix. + ldx ##ROM.INBUF point to passed prefix. jsr copyvol copy the name into the buffer. pla retrieve the switch status @@ -59,9 +63,10 @@ GQdisp lda RRAMWRAMBNK1 read/write LC bank 1 * prefix is passed at $00/0200 by GQuit. L6020 jsr MLI set prefix - .DA #$C6 + .DA #MLI.SETPREFIX .DA pfxparms bcc L602D if prefix ok. + jsr gqerror error handler. bra L6020 try again @@ -69,19 +74,22 @@ L6020 jsr MLI set prefix L602D xce native mode (carry clear) >LONGX 16 bit regs, 8 bit acc. - lda pbuf+1 is the application name + lda SEL2.PBuf+1 is the application name cmp #$2F a complete pathname ? bne L603D no, use prefix as volume name - ldx ##pbuf else use the application name. + + ldx ##SEL2.PBuf else use the application name. jsr copyvol copy the volume name to buffer. L603D sec back to emulation mode. xce L603F jsr MLI open the application file - .DA #$C8 + .DA #MLI.OPEN .DA opnparms bcc L604C if open ok. + jsr gqerror handle error. bra L603F try again. + L604C lda oprefnum copy ref number to parameter lists sta eofrefn sta rdrefnum @@ -90,9 +98,10 @@ L604C lda oprefnum copy ref number to parameter lists * do a geteof call for how many bytes to read L6058 jsr MLI get eof - .DA #$D1 + .DA #MLI.GETEOF .DA eofparms bcc L6065 eof ok. + jsr gqerror handle error. bra L6058 try again. @@ -102,32 +111,41 @@ L6065 lda eofval sta rdcount lda eofval+1 sta rdcount+1 + L6071 jsr MLI read - .DA #$CA + .DA #MLI.READ .DA readparm bcc L607E read ok + jsr gqerror bra L6071 + L607E jsr MLI close - .DA #$CC + .DA #MLI.CLOSE .DA closeprm bcc L608B close ok + jsr gqerror bra L607E + L608B jsr dolaunch check for possible 2nd pathname. bne L6099 if none then run program + jsr ckfordrv else make sure the file is online. bcc L6099 if so then run the program. + lda #$45 volume not found error. bra L60AB -L6099 lda RROMBNK2 enable ROM - jmp sysentry execute the system application + +L6099 lda IO.RROMBNK2 enable ROM + jmp SEL2.SYSLoad execute the system application gqerror clc xce 16 bit native mode >LONGMX jsr mountvol mount volume. bcs L60AB if error. + sec back to emulation mode. xce rts @@ -158,17 +176,17 @@ L60AB clc native mode sec emulation mode xce jsr MLI quit back to GQuit - .DA #$65 + .DA #MLI.QUIT .DA quitparms * p8 mount volume * -* on entry: volbuf = name of volume to mount. +* on entry: SEL2.VBuf = name of volume to mount. * on exit: carry clear if mount volume displayed and 'return' was pressed. * carry set if no window displayed or if had window and 'esc' pressed. -mountvol ldy ##$0000 volbuf>>16 - ldx ##volbuf set up pointer to volume name. +mountvol ldy ##$0000 SEL2.VBuf>>16 + ldx ##SEL2.VBuf set up pointer to volume name. * if error is 'volume not found' or 'no disk in drive' then display the * Mount Volume window, otherwise return with carry set. @@ -176,8 +194,10 @@ mountvol ldy ##$0000 volbuf>>16 and ##$00FF mask just in case. cmp ##$0045 volume not found ? beq L6101 yes + cmp ##$002F no disk in drive ? beq L6101 yes + sec indicate error not handled. rts return with error code still in acc. @@ -212,9 +232,11 @@ L6101 pha save error code in case esc pressed. plx cmp ##$0001 which button was pressed ? bne L613C if Escape pressed. + clc indicate Return was pressed. pla pull original error code off stack. rts return with carry clear. + L613C sec indicate Escape was pressed. pla restore error code. rts return with carry set. @@ -222,22 +244,24 @@ L613C sec indicate Escape was pressed. * copy the volume name from the given pathname to the volume name buffer. * * inputs: x = length byte of complete pathname containing volume name. -* output: volume name is stored in volbuf. +* output: volume name is stored in SEL2.VBuf. copyvol lda >1,x get the first slash - sta volbuf+1 + sta SEL2.VBuf+1 ldy ##$0002 initialize the length count. L6148 lda >2,x now copy the volume name up to cmp #$2F the separating slash. beq L6156 - sta volbuf,y + + sta SEL2.VBuf,y inx iny bra L6148 + L6156 dey fix character count. tya length. - sta volbuf store the resultant string length. + sta SEL2.VBuf store the resultant string length. rts * translate a filename message from the message center to the currently @@ -246,14 +270,17 @@ L6156 dey fix character count. * on exit, the z-flag is set if a filename was correctly passed to the * application elst the z-flag is clear if it couldn't be done. -dolaunch lda sysentry does the app start with a jump ? +dolaunch lda SEL2.SYSLoad does the app start with a jump ? cmp #$4C bne L616F no, doesn't follow the convention. + lda #$EE check for the signature bytes. - cmp sysentry+3 + cmp SEL2.SYSLoad+3 bne L616F 1st one doesn't match, skip it. - cmp sysentry+4 + + cmp SEL2.SYSLoad+4 beq L6170 both match, go get a filename message. + L616F rts just return to launch the app. L6170 lda #$FF put flag conditioning value on @@ -285,6 +312,7 @@ L6170 lda #$FF put flag conditioning value on pha (still in acc and x regs) >IIGS MessageCenter bcs L6203 branch if no message. + pha leave 4 bytes free on stack pha (will be used as a direct page pointer) tsc get the stack pointer. @@ -299,28 +327,34 @@ L6170 lda #$FF put flag conditioning value on ldy ##$0006 get the message command. lda [$00],y bne bad_msg if print, then skip it. + lda $00 adjust pointer to filename string. clc adc ##$0008 sta $00 bcc L61D1 + inc $02 L61D1 lda [$00] get the length of the string. and ##$00FF mask off high (leaving just the length) >SHORTM 8 bit accumulator - cmp sysentry+5 check against length of app buffer. + cmp SEL2.SYSLoad+5 check against length of app buffer. beq L61DF if equal then continue with move. + bcs bad_msg if too long then bad message. -L61DF tay string length. + +L61DF tay string length. + L61E0 lda [$00],y get a character. - sta sysentry+6,y store it in the app's filename buffer - sta inbuf,y and in prefix buffer. + sta SEL2.SYSLoad+6,y store it in the app's filename buffer + sta ROM.INBUF,y and in prefix buffer. dey bpl L61E0 + lda #$00 change flag conditioning value on stack sta $0D,s to indicate a filename is passed. -bad_msg - >LONGM 16-bit acc. + +bad_msg >LONGM 16-bit acc. pld restore direct register. pla fix stack because handle and userid pla still on stack. @@ -329,26 +363,34 @@ bad_msg pha garbage handle (not used). pha >IIGS MessageCenter go delete the message. + L6203 >IIGS DisposeHandle throw away message (handle is on stack) + L620A >IIGS MMShutDown shutdown the memory manager (userid is sec on stack). xce back to emulation mode. pla condition z-flag with value on stack. bne L6231 then done. - ldx inbuf get length of pathname. - lda #$2F look for slash. -L621B cmp inbuf,x + + ldx ROM.INBUF get length of pathname. + lda #$2F look for slash. + +L621B cmp ROM.INBUF,x beq L6225 when found, set prefix. + dex bne L621B + bra L6231 if no slash, just skip it. + L6225 dex don't include trailing slash. - stx inbuf set new length. + stx ROM.INBUF set new length. jsr MLI set the P8 prefix. - .DA #$C6 + .DA #MLI.SETPREFIX .DA pfxparms lda #$00 set z-flag + L6231 rts and go launch the app. * check for disk volume @@ -360,49 +402,59 @@ L6231 rts and go launch the app. ckfordrv clc native mode xce >LONGX 16-bit regs, 8-bit acc. - ldx ##sysentry+6 point to pathname buffer. + ldx ##SEL2.SYSLoad+6 point to pathname buffer. jsr copyvol copy volume name to pathname buffer. + .1 sec emulation mode. xce jsr MLI get info on the volume. - .DA #$C4 + .DA #MLI.GFINFO .DA gfiparms bcc .2 branch if volume found, + clc (native mode) xce >LONGMX - jsr mountvol else ask user to mount the volume. + jsr mountvol else ask user to mount the volume. bcc .1 if pressed, then try again. + sec emulation mode. xce sec disk not found. + .2 rts * Prodos 8 parameter lists -pfxparms .DA #01 one parm. - .DA inbuf address of prefix. +pfxparms .DA #01 1 parm. + .DA ROM.INBUF address of prefix. + opnparms .DA #3 3 parms. - .DA pbuf pathname - .DA op_buf i/o buffer + .DA SEL2.PBuf pathname + .DA SEL2.FBuf i/o buffer oprefnum .HS 00 reference # + eofparms .DA #02 2 parms eofrefn .HS 00 reference # eofval .HS 000000 3 byte eof value + readparm .DA #04 4 parms rdrefnum .HS 00 reference # - .DA sysentry read into $2000 (bank 0). + .DA SEL2.SYSLoad read into $2000 (bank 0). rdcount .HS 0000 # of bytes to read. .HS 0000 transfer count + closeprm .DA #1 1 parm closeref .HS 00 reference # + quitparms .DA #04 4 parms. .HS 00 quit back to launcher (GQuit) .HS 0000 .HS 00 .HS 0000 + gfiparms .DA #$0A 10 parms - .DA volbuf volume buffer + .DA SEL2.VBuf volume buffer .DA #0 access .DA #0 file type .DA 0 aux type @@ -438,7 +490,12 @@ button1 .DA #$0D button2 .DA #$0B .AS "Cancel: Esc" *-------------------------------------- + .EP +*-------------------------------------- +* .LIST ON SEL2.LEN .EQ *-SEL2.START + .LIST OFF +*-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.sel2 LOAD usr/src/prodos.fx/prodos.s diff --git a/ProDOS.FX/ProDOS.S.TCLK.txt b/ProDOS.FX/ProDOS.S.TCLK.txt index a92a464b..20822f77 100644 --- a/ProDOS.FX/ProDOS.S.TCLK.txt +++ b/ProDOS.FX/ProDOS.S.TCLK.txt @@ -8,7 +8,9 @@ clkmode .EQ $0538 clock mode rdtcp .EQ $C108 Thunderclock read entry wttcp .EQ $C10B Thunderclock write entry *-------------------------------------- -TCLK.START ldx TCLK.Cx2+2 clock slot = $C1. +TCLK.START .PH CLK + + ldx TCLK.Cx2+2 clock slot = $C1. lda clkmode,x save current mode pha @@ -22,17 +24,17 @@ TCLK.Cx2 jsr rdtcp read month, day of week, day of month ldx #$04 index for 5 values. ldy #$0C read minutes 1st, month last. -.1 lda inbuf,y convert values to binary. +.1 lda ROM.INBUF,y convert values to binary. and #$07 no value > 5 decimal. - sta pcl 'tens' place value + sta ZP.PCL 'tens' place value asl multiply by 10 asl - adc pcl + adc ZP.PCL asl - adc inbuf+1,y add to ascii 'ones' place + adc ROM.INBUF+1,y add to ascii 'ones' place sec and subtract out the ascii sbc #$B0 - sta pcl,x save converted value. + sta ZP.PCL,x save converted value. dey index to next lowest value dey dey @@ -44,8 +46,8 @@ TCLK.Cx2 jsr rdtcp read month, day of week, day of month ror ror ror high bit of month held in carry - ora A1L - sta p8date save low value of date. + ora ZP.A1L + sta GP.DATE save low value of date. php save high bit of month. and #$1F isolate day. adc tdays-1,y (y = month) @@ -59,7 +61,7 @@ TCLK.Cx2 jsr rdtcp read month, day of week, day of month bcs .3 loop until < 0. adc #$07 make it in the range of 0-6. - sbc pch the delta provides years offset. + sbc ZP.PCH the delta provides years offset. bcs .4 branch if positive adc #$07 else make it positive again. @@ -68,12 +70,12 @@ TCLK.Cx2 jsr rdtcp read month, day of week, day of month lda yradj,y look up year plp and combine it with hi bit of month rol - sta p8date+1 P8 date + sta GP.DATE+1 P8 date - lda A1L+1 hour - sta p8time+1 P8 time - lda A2L minute - sta p8time + lda ZP.A1L+1 hour + sta GP.TIME+1 P8 time + lda ZP.A2L minute + sta GP.TIME pla restore previous mode. ldx TCLK.Cx2+2 clock slot = $C1 @@ -111,7 +113,9 @@ yradj .DA #$18 Monday .DA #$19 Wednesday .DA #$18 Tuesday *-------------------------------------- - .LIST ON + .EP +*-------------------------------------- +* .LIST ON TCLK.LEN .EQ *-TCLK.START .LIST OFF *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.XCLK.txt b/ProDOS.FX/ProDOS.S.XCLK.txt index 1b166776..f27580f2 100644 --- a/ProDOS.FX/ProDOS.S.XCLK.txt +++ b/ProDOS.FX/ProDOS.S.XCLK.txt @@ -8,7 +8,9 @@ NEW XCLK.API.RTCBUF .EQ $2B0 XCLK.API.RDCLK .EQ $D8F0 *-------------------------------------- -XCLK.START php +XCLK.START .PH CLK + +XCLK.START1 php sei ldx #XCLK.START2xx.L-1 @@ -22,21 +24,21 @@ XCLK.START php lda XCLK.API.RTCBUF+1 and #%01111111 59 jsr XCLK.BCD2BIN - sta TIMELO + sta GP.TIME * Hour lda XCLK.API.RTCBUF+2 and #%00111111 23 jsr XCLK.BCD2BIN - sta TIMELO+1 + sta GP.TIME+1 * Day lda XCLK.API.RTCBUF+4 and #%00111111 31 jsr XCLK.BCD2BIN - sta DATELO + sta GP.DATE * Year lda XCLK.API.RTCBUF+6 99 jsr XCLK.BCD2BIN - sta DATELO+1 + sta GP.DATE+1 * Month lda XCLK.API.RTCBUF+5 and #%00011111 12 @@ -46,8 +48,8 @@ XCLK.START php asl asl asl - tsb DATELO - rol DATELO+1 + tsb GP.DATE + rol GP.DATE+1 plp rts @@ -55,35 +57,37 @@ XCLK.START php XCLK.BCD2BIN tax and #$F0 lsr CC - sta PCL temp location + sta ZP.PCL temp location lsr CC lsr CC - adc PCL - sta PCL + adc ZP.PCL + sta ZP.PCL txa * clc and #$0F - adc PCL + adc ZP.PCL rts -XCLK.START2xx bit RROMBNK2 +XCLK.START2xx bit IO.RROMBNK2 sta $C070 bit $FACA bit $FACA bit $FAFE jsr XCLK.API.RDCLK bit $F851 - bit RRAMWRAMBNK1 - bit RRAMWRAMBNK1 + bit IO.RRAMWRAMBNK1 + bit IO.RRAMWRAMBNK1 rts XCLK.START2xx.L .EQ *-XCLK.START2xx *-------------------------------------- XCLK.CODE2xx .EQ XCLK.API.RTCBUF-XCLK.START2xx.L *-------------------------------------- - .LIST ON + .EP +*-------------------------------------- +* .LIST ON XCLK.LEN .EQ *-XCLK.START .LIST OFF *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.XDOS.A.txt b/ProDOS.FX/ProDOS.S.XDOS.A.txt index 2c867134..19ff2f3a 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.A.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.A.txt @@ -1,174 +1,284 @@ NEW AUTO 3,1 *-------------------------------------- -XDOS cld no decimal. - sty mliy save x and y - stx mlix - +FCB.MAX .EQ 8 +FCB.ID .EQ 0 +FCB.DEVID .EQ 1 d_dev -> d_dev+5 +FCB.DIRHBLK .EQ 2 2 bytes +FCB.DIREBLK .EQ 4 2 bytes +FCB.DIRENUM .EQ 6 +FCB.STYPE .EQ 7 +FCB.F .EQ 8 +FCB.F.STMOD .EQ %00001000 +FCB.F.UMOD .EQ %00010000 +FCB.F.DBLKMOD .EQ %01000000 +FCB.F.IBLKMOD .EQ %10000000 +FCB.ACCESS .EQ 9 +FCB.NLBYTE .EQ 10 +FCB.BUFID .EQ 11 +FCB.1stBLK .EQ 12 2 bytes +FCB.IBLK .EQ 14 2 bytes +FCB.DBLK .EQ 16 2 bytes +FCB.MARK .EQ 18 3 bytes +FCB.EOF .EQ 21 3 bytes +FCB.UBLK .EQ 24 2 bytes + +FCB.FLEVEL .EQ 27 +FCB.DIRTY .EQ 28 + + +FCB.NLMASK .EQ 31 +* +FCB .EQ 32 +*-------------------------------------- +VCB.DEV .EQ 16 +VCB.OFCNT .EQ 17 +VCB.BMAP .EQ 18 2 bytes +VCB.TBLK .EQ 20 2 bytes +VCB.FBLK .EQ 22 2 bytes +VCB.BMAPIDX .EQ 24 +* +VCB .EQ 25 +*-------------------------------------- +XDOS.VCBPtr .EQ XDOS.VCBs+0 +XDOS.VCBDupFlag .EQ XDOS.VCBs+1 +XDOS.VCBDupEnt .EQ XDOS.VCBs+2 +bmcnt .EQ XDOS.VCBs+3 +bmptr .EQ XDOS.VCBs+4 +basval .EQ XDOS.VCBs+5 +XDOS.VCB0 .EQ XDOS.VCBs+6 range $D906-$DA00 +*-------------------------------------- +* ZERO Page +*-------------------------------------- +zpt .EQ $48 highly used zero page index pointer +datptr .EQ $4A ptr to data area of buffer. +sos .EQ $4C sos buffer pointer. +usrbuf .EQ $4E data ptr in user buffer. +*-------------------------------------- +XDOS.START .PH XDOS + + .DO AUXLC=0 + +XDOS.MAIN cld no decimal. + + sty GP.MLIY save x and y + stx GP.MLIX + ply get processor status - + pla find out the address of the caller - sta A3L + sta ZP.A3L clc preserve the address of the call spec. adc #$04 - sta mliretn last MLI call return address + sta GP.MLIRTN last MLI call return address pla - sta A3L+1 + sta ZP.A3L+1 adc #$00 - sta mliretn+1 + sta GP.MLIRTN+1 phy pull processor status - plp to re-enable interrupts. + + .ELSE + +XDOS.AUX cld + + bit IO.RRAMWRAMBNK1 + sty GP.BNKBYT2 + stx GP.MLIEXIT.X+1 + + tsx + stx $100 + ldx $101 + txs + + sec + ror GP.MLIACTV + + pha + + lda GP.MLIEXIT.PCL+1 + sta ZP.A3L + clc + adc #$04 + sta GP.MLIEXIT.PCL+1 + lda GP.MLIEXIT.PCH+1 + sta ZP.A3L+1 + adc #$00 + sta GP.MLIEXIT.PCH+1 + + .FIN +*-------------------------------------- + plp to re-enable interrupts. cld still no decimal - stz p8error clear any previous errors. + stz GP.ERROR clear any previous errors. ldy #$01 find out if command is valid. - lda (A3L),y get command # + lda (ZP.A3L),y get command # lsr and hash it to a range of 0-$1F lsr lsr lsr clc - adc (A3L),y + adc (ZP.A3L),y and #$1F tax - lda (A3L),y check result to see if valid command # + lda (ZP.A3L),y check result to see if valid command # cmp XDOS.CmdNums,x - bne scnerr + bne XDOS.BadCall iny index to call spec parm list. - lda (A3L),y make A3L point to parameter count byte + lda (ZP.A3L),y make A3L point to parameter count byte pha in parameter block. iny - lda (A3L),y - sta A3L+1 + lda (ZP.A3L),y + sta ZP.A3L+1 pla - sta A3L + sta ZP.A3L lda XDOS.ParamCnt,x make sure parameter list has the correct # of parameters. - beq goclock clock has 0 parameters. + beq .2 clock has 0 parameters. - cmp (A3L) - bne scperr error if wrong count. + cmp (ZP.A3L) + bne XDOS.BadCnt error if wrong count. lda XDOS.CmdNums,x get call # again - cmp #MLIQUIT is it quit? - beq special if so, then call quit dispatcher + cmp #MLI.QUIT is it quit? + beq .1 if so, then call quit dispatcher - asl carry set if bfm or dev mgr - bpl godevmgr - bcs gobfmgr + asl carry set if BFMgr or DevMgr + bpl .3 + bcs .4 lsr shift back down for interrupt manager and #$03 valid calls are 0 and 1 - jsr XDOS.intmgr - bra exitmli + jsr XDOS.IntMgr + bra XDOS.Exit -special jmp jspare P8 system death vector +.1 jmp GP.DISPATCH P8 system death vector -goclock jsr clockv go read clock. - bra exitmli no errors possible +.2 jsr GP.CLOCK go read clock. + bra XDOS.Exit no errors possible -godevmgr lsr shift back down for device manager. +.3 lsr shift back down for device manager. adc #$01 valid commands are 1 and 2. - sta A4L save command #. - jsr XDOS.devmgr execute read or write request. - bra exitmli + sta ZP.CMDNUM + jsr XDOS.DevMgr execute read or write request. + bra XDOS.Exit -gobfmgr lsr shift back down for block file manager. +.4 lsr shift back down for block file manager. and #$1F valid commands are 0-$13 tax - - jsr XDOS.bfmgr -exitmli stz bubit clear backup bit - ldy p8error P8 error code - cpy #$01 if > 0 then set carry - tya and set z flag. + jsr XDOS.BFMgr +*-------------------------------------- +XDOS.Exit stz GP.BUBIT clear backup bit + + ldy GP.ERROR P8 error code + cpy #$01 if > 0 then set C + tya and set Z php disable interrupts until exit complete. sei - lsr mliact indicate MLI done. - plx save status register until return. - lda mliretn+1 place last MLI call return address - pha on stack. return is done via 'rti' - lda mliretn so the status register is restored - pha at the same time, so - phx place status back on stack - tya return error, if any. - ldx mlix MLI X register savearea - ldy mliy MLI Y register savearea - pha - lda bnkbyt1 restore language card status - jmp GP.MLIEXIT and return. + lsr GP.MLIACTV indicate MLI done. -nodevice lda #MLI.E.NODEV no device connected. - jsr GP.P8errv + ply Get status register until return. + +* Y = Status register +* A = MLI Error code -scnerr lda #MLI.E.BADCALL + .DO AUXLC=0 + + ldx GP.MLIRTN+1 place last MLI call return address + phx on stack. return is done via 'rti' + ldx GP.MLIRTN so the status register is restored + phx at the same time, so + + phy place status back on stack + + pha Push return error, if any. + + ldx GP.MLIX MLI X register savearea + ldy GP.MLIY MLI Y register savearea + lda GP.BNKBYT1 restore language card status + jmp GP.MLIEXIT and return. + + .ELSE + + tsx + stx $101 + ldx $100 + txs + jmp GP.MLIEXITX + + .FIN +*-------------------------------------- +XDOS.NoDevice lda #MLI.E.NODEV no device connected. + jsr GP.SYSERR + +XDOS.BadCall lda #MLI.E.BADCALL .HS 2C BIT ABS -scperr lda #MLI.E.BADCNT - jsr gosyserr - bra exitmli +XDOS.BadCnt lda #MLI.E.BADCNT + jsr XDOS.GoSysErr + bra XDOS.Exit *-------------------------------------- * ProDOS Device Manager *-------------------------------------- -XDOS.devmgr ldy #$05 the call spec for devices must +XDOS.DevMgr ldy #$05 the call spec for devices must -.1 lda (A3L),y be passed to drivers in page zero: - sta A4L,y +.1 lda (ZP.A3L),y be passed to drivers in page zero: + sta ZP.CMDNUM,y dey bne .1 - ldx buf+1 buffer page + ldx ZP.BUFPTR+1 buffer page stx usrbuf+1 to user buffer inx inx - lda buf is buffer page aligned (nn00) ? + lda ZP.BUFPTR is buffer page aligned (nn00) ? beq .2 branch if it is inx else account for 3-page straddle .2 jsr vldbuf1 make sure user buffer is not - bcs gosyserr conflicting with protected ram. + bcs XDOS.GoSysErr conflicting with protected ram. jsr XDOS.DevCall call internal entry for device dispatch bcc XDOS.DevCall.RTS -gosyserr jsr GP.P8errv +XDOS.GoSysErr jsr GP.SYSERR *-------------------------------------- XDOS.DevCall php do not allow interrupts. - sei + sei - lda unitnum get device # and + lda ZP.UNITNUM get device # and and #$F0 strip misc lower nibble - sta unitnum then save it. + sta ZP.UNITNUM then save it. lsr use as index to device table lsr lsr tax jsr XDOS.DevCall.Jmp - bit CLRC8ROM RELEASE $C800-$CFFF ROM space + bit IO.CLRC8ROM RELEASE $C800-$CFFF ROM space bcs .9 - + plp clc rts - -.9 plp + +.9 plp sec XDOS.DevCall.RTS rts - + XDOS.DevCall.Jmp - jmp (DEVPTRS,x) goto driver (or error if no driver) + jmp (GP.DEVPTRS,x) goto driver (or error if no driver) *-------------------------------------- * ProDOS interrupt manager *-------------------------------------- -XDOS.intmgr sta A4L interrupt command +XDOS.IntMgr sta ZP.A4L interrupt command lsr allocate interrupt or deallocate? - bcs dealcint branch if deallocate. + bcs .4 branch if deallocate. ldx #$03 test for a free interrupt space in tbl. @@ -176,17 +286,17 @@ XDOS.intmgr sta A4L interrupt command bne .2 branch if spot occupied. ldy #$03 get address of routine. - lda (A3L),y must not be zero page. - beq badint error if it is. + lda (ZP.A3L),y must not be zero page. + beq .3 error if it is. sta GP.IRQVs-2,x save high address dey - lda (A3L),y + lda (ZP.A3L),y sta GP.IRQVs-3,x and low address. txa return interrupt # in range 1-4 lsr dey - sta (A3L),y pass back to user. + sta (ZP.A3L),y pass back to user. clc no errors. rts @@ -197,39 +307,44 @@ XDOS.intmgr sta A4L interrupt command lda #MLI.E.IRQFULL interrupt table full .HS 2C BIT ABS -badint lda #MLI.E.INVPARAM invalid parameter. - jsr GP.P8errv +.3 lda #MLI.E.INVPARAM invalid parameter. + jsr GP.SYSERR -dealcint ldy #$01 zero out interrupt vector - lda (A3L),y but make sure it is a valid #. - beq badint error if < 1 +.4 ldy #$01 zero out interrupt vector + lda (ZP.A3L),y but make sure it is a valid #. + beq .3 error if < 1 cmp #$05 or > 4 - bcs badint + bcs .3 asl tax - + stz GP.IRQVs-2,x stz GP.IRQVs-1,x - clc +* clc rts *-------------------------------------- -XDOS.syserr sta p8error P8 error code +XDOS.SysErr sta GP.ERROR P8 error code plx plx pop 1 level of return sec rts *-------------------------------------- +* $01 = more than 255 unclaimed irqs +* $0A = open file has no volume +* $0B = open file has no 1K buffer +* $0C = block allocation error. +*-------------------------------------- XDOS.SysDeath tax death error code. - sta CLR80DISP disable 80 col hardware. - lda SETTEXT switch in text. - lda cortflag is this a Cortland? + sta IO.CLR80DISP disable 80 col hardware. + lda IO.SETTEXT switch in text. + lda XDOS.CortFlag is this a Cortland? beq .1 if not, don't use super hires switch. - stz newvideo force off super hires. + stz IO.GS.NEWVIDEO force off super hires. -.1 lda CLRPAGE2 switch in text page 1. +.1 lda IO.CLRPAGE2 switch in text page 1. ldy #deathmsg.LEN-1 @@ -249,9 +364,9 @@ XDOS.SysDeath tax death error code. .3 ldy #deathmsg.LEN ora #$80 sta $400,y - + lda #" " - + .4 iny sta $400,y cpy #39 @@ -261,7 +376,7 @@ XDOS.SysDeath tax death error code. *-------------------------------------- * ProDOS Block File Manager *-------------------------------------- -XDOS.bfmgr lda XDOS.CmdFlags,x translate into command address. +XDOS.BFMgr lda XDOS.CmdFlags,x translate into command address. asl bit 7 indicates pathname to process sta cmdtemp and #$3F bit 6 is refnum, 5 is time to process @@ -285,14 +400,15 @@ nopath asl cmdtemp test for refnum processing bcs errorsys nopreref asl cmdtemp check for necessity of time stamp - bcc H3274 + bcc H3274 - jsr clockv date/time + jsr GP.CLOCK date/time H3274 jsr $FFFF SELF MODIFIED : execute command bcc goodop -errorsys jsr GP.P8errv +errorsys jsr GP.SYSERR + goodop rts *-------------------------------------- * entry used by rename for 2nd pathname. @@ -301,18 +417,18 @@ XDOS.GetRenPath ldy #$03 get address to new pathname .HS 2C *-------------------------------------- XDOS.GetPath ldy #$01 index to pathname pointer - lda (A3L),y low pointer address + lda (ZP.A3L),y low pointer address sta zpt iny - lda (A3L),y hi pointer address + lda (ZP.A3L),y hi pointer address sta zpt+1 - ldx #$00 x = index to pathbuf + ldx #$00 x = index to XDOS.PathBuf ldy #$00 y = index to input pathname. stz prfxflg assume prefix is in use. - stz pathbuf mark pathbuf = nothing processed. + stz XDOS.PathBuf mark XDOS.PathBuf = nothing processed. lda (zpt),y validate pathname length > 0 and < 65 beq errsyn @@ -332,8 +448,8 @@ XDOS.GetPath ldy #$01 index to pathname pointer dec prfxflg set prefix flag = prefix not used. iny index to 1st character of pathname. -H32AD lda #$FF set current position of pathbuf - sta pathbuf,x to indicate end of pathname. +H32AD lda #$FF set current position of XDOS.PathBuf + sta XDOS.PathBuf,x to indicate end of pathname. sta namcnt $FF = no chars processed in local name. stx namptr pointer to local name length byte. @@ -352,26 +468,32 @@ H32B8 cpy pathcnt done with pathname processing? cmp #'a' lowercase? bcc .1 no - and #$5F shift to uppercase + cmp #'z'+1 + bcs .1 + + eor #$20 to uppercase .1 .FIN - sta pathbuf,x store char + sta XDOS.PathBuf,x store char inc namcnt is it the 1st char of a local name? bne .2 no - + inc namcnt increment to 1 jsr XDOS.IsValidFirstChar bcc H32B8 bra errsyn - + .2 jsr XDOS.IsValidChar bcc H32B8 errsyn lda #MLI.E.INVPATH - sec - rts + .HS 2C +ptyperr lda #MLI.E.UNSUPST filetype error (not a directory) +pfxerr sec + rts + endpath lda #$00 end pathname with a 0 bit namcnt also make sure count is positive bpl H32FD @@ -380,7 +502,7 @@ endpath lda #$00 end pathname with a 0 dex H32FD inx - sta pathbuf,x + sta XDOS.PathBuf,x beq errsyn error if '/' only. stx pathcnt save length of pathname @@ -392,7 +514,7 @@ endname lda namcnt validate local name < 16 phx save pointer ldx namptr get index to beginning of local name - sta pathbuf,x save local name's length + sta XDOS.PathBuf,x save local name's length plx restore pointer bne H32AD branch if more names to process @@ -400,25 +522,25 @@ endname lda namcnt validate local name < 16 lda prfxflg make sure all pathnames are prefixed bne H3323 or begin with a '/'. - lda newpfxptr must be non-zero + lda GP.NEWPFXPTR must be non-zero beq errsyn H3323 rts *-------------------------------------- XDOS.SetPrefix jsr XDOS.GetPath call is made to detect if a null path. bcc H3333 path ok. - ldy pathbuf is it a null pathname? + ldy XDOS.PathBuf is it a null pathname? bne pfxerr error if not - sty newpfxptr fix appletalk PFI bug - sty preflag prefix flag + sty GP.NEWPFXPTR fix appletalk PFI bug + sty GP.PFXPTR clc no error rts H3333 jsr XDOS.FindFileOrVol go find specified prefix directory. - bcs pfxerr branch if error is not root directory. +pfxerr1 bcs pfxerr branch if error is not root directory. -H333C lda d_stor make sure last local name is dir type + lda d_stor make sure last local name is dir type and #$D0 (either root or sub). eor #$D0 directory? bne ptyperr wrong type @@ -426,7 +548,7 @@ H333C lda d_stor make sure last local name is dir type ldy prfxflg new or appended prefix? bne H334D - lda newpfxptr append new prefix to old + lda GP.NEWPFXPTR append new prefix to old H334D tay sec find new beginning of prefix @@ -435,8 +557,8 @@ H334D tay bcc errsyn then error tax - sta newpfxptr - sta preflag + sta GP.NEWPFXPTR + sta GP.PFXPTR lda d_dev save device # sta p_dev lda d_frst and address of 1st block @@ -444,25 +566,21 @@ H334D tay lda d_frst+1 sta p_blok+1 -.1 lda pathbuf,y - sta pathbuf,x +.1 lda XDOS.PathBuf,y + sta XDOS.PathBuf,x iny inx bne .1 clc good prefix rts - -ptyperr lda #MLI.E.UNSUPST filetype error (not a directory) -pfxerr sec - rts *-------------------------------------- XDOS.GetPrefix clc calc how big a buffer is needed. ldy #$01 get index to users pathname buffer - lda (A3L),y + lda (ZP.A3L),y sta usrbuf user buffer ptr iny - lda (A3L),y + lda (ZP.A3L),y sta usrbuf+1 stz cbytes+1 set buffer length at 64 char max @@ -470,10 +588,10 @@ XDOS.GetPrefix clc calc how big a buffer is needed. sta cbytes jsr valdbuf go validate prefix buffer address - bcs pfxerr + bcs pfxerr1 ldy #$00 y = indirect index to user buffer. - lda newpfxptr get address of beginning of prefix + lda GP.NEWPFXPTR get address of beginning of prefix tax beq nulprfx if null prefix. @@ -484,7 +602,7 @@ nulprfx sta (usrbuf),y store length in user's buffer. beq gotprfx branch if null prefix. sendprfx iny inc to next user buffer location. - lda pathbuf,x get next char of prefix. + lda XDOS.PathBuf,x get next char of prefix. sndlimit sta (usrbuf),y give char to user. and #$F0 check for length descriptor. @@ -502,14 +620,14 @@ gotprfx clc no error rts *-------------------------------------- XDOS.GetFCB ldy #$01 index to ref# - lda (A3L),y is it a valid file# ? + lda (ZP.A3L),y is it a valid file# ? beq badref must not be 0. cmp #FCB.MAX+1 bcs badref pha - dec + dec lsr ror ror @@ -517,13 +635,13 @@ XDOS.GetFCB ldy #$01 index to ref# sta fcbptr used as an index to fcb tax pla restore ref# in acc - cmp FCBs+FCB.ID,x + cmp XDOS.FCBs+FCB.ID,x bne errnoref *-------------------------------------- -XDOS.GetFCBBufX lda FCBs+FCB.BUFID,x get page address of file buffer. - +XDOS.GetFCBBufX lda XDOS.FCBs+FCB.BUFID,x get page address of file buffer. + tay index into global buffer table. - lda buftbl-1,y + lda GB.BUFTABL-1,y sta bufaddrh beq fcbdead fcb corrupted @@ -533,7 +651,7 @@ XDOS.GetFCBBufX lda FCBs+FCB.BUFID,x get page address of file buffer. inc index block always 2 pages after data sta zpt+1 - lda buftbl-2,y ???? ALWAYS 0 + lda GB.BUFTABL-2,y ???? ALWAYS 0 sta bufaddrl sta datptr index and data buffers always on @@ -541,11 +659,11 @@ XDOS.GetFCBBufX lda FCBs+FCB.BUFID,x get page address of file buffer. jsr XDOS.FCBDevIDSelect - lda #VCB0 + lda #XDOS.VCB0 fndfvol tay search for associated vcb - lda VCBs+VCB.DEV,y - cmp FCBs+FCB.DEVID,x is this vcb the same device? + lda XDOS.VCBs+VCB.DEV,y + cmp XDOS.FCBs+FCB.DEVID,x is this vcb the same device? beq tstvopen if it is, make sure volume is active. nxtfvol tya adjust index to next vcb. @@ -558,16 +676,16 @@ nxtfvol tya adjust index to next vcb. fcbdead lda #$0B fcb error so - jsr GP.SysDeath kill the system. + jsr GP.SYSDEATH kill the system. -tstvopen lda VCBs,y make sure this vcb is open. +tstvopen lda XDOS.VCBs,y make sure this vcb is open. beq nxtfvol branch if it is not active. - sty vcbptr save ptr to good vcb. + sty XDOS.VCBPtr save ptr to good vcb. clc no error - rts Y = VCBPtr, X = FCBPtr + rts Y = XDOS.VCBPtr, X = FCBPtr -errnoref stz FCBs,x +errnoref stz XDOS.FCBs,x badref lda #MLI.E.BADREF requested refnum is sec illegal (out of range) @@ -578,9 +696,9 @@ XDOS.Online jsr mvdbufr figure out how big buffer has to be. stz cbytes set this for valdbuf routine. stz cbytes+1 ldy #$01 - lda (A3L),y if 0 then cbytes=$100 else $010 for one + lda (ZP.A3L),y if 0 then cbytes=$100 else $010 for one and #$F0 device. mask out unused nibble. - sta DEVNUM last device used. + sta GP.DEVNUM last device used. beq .1 branch if all devices. lda #$10 cbytes = $010 @@ -600,14 +718,14 @@ XDOS.Online jsr mvdbufr figure out how big buffer has to be. bne .3 sta namptr used as pointer to user buffer. - lda DEVNUM get device # again. + lda GP.DEVNUM get device # again. bne online1 branch if only 1 device to process. jsr mvdevnums get list of currently recognized dev's. .4 phx save index to last item on list lda loklst,x - sta DEVNUM save desired device to look at. + sta GP.DEVNUM save desired device to look at. jsr online1 log this volume and return it's name. lda namptr inc pointer for next device clc @@ -629,12 +747,12 @@ online1 jsr XDOS.FindVCBForDevNum see if it has already been logged in. jsr XDOS.ReadGBufAX read ROOT VOL into general purpose buffer. bcc .1 branch if read was ok. - ldx vcbptr - ldy VCBs+VCB.OFCNT,x don't take the vcb offline if + ldx XDOS.VCBPtr + ldy XDOS.VCBs+VCB.OFCNT,x don't take the vcb offline if bne online1.ERR there are active files present. - stz VCBs,x now take the volume offline - stz VCBs+VCB.DEV,x + stz XDOS.VCBs,x now take the volume offline + stz XDOS.VCBs+VCB.DEV,x bra online1.ERR branch if unable to read. @@ -643,21 +761,21 @@ online1 jsr XDOS.FindVCBForDevNum see if it has already been logged in. bcs online1.ERR .FIN - ldx vcbptr - lda VCBs,x has it been logged in before? + ldx XDOS.VCBPtr + lda XDOS.VCBs,x has it been logged in before? beq .2 if not. - lda VCBs+VCB.OFCNT,x it has, are there active files? + lda XDOS.VCBs+VCB.OFCNT,x it has, are there active files? bne .3 branch if volume is currently busy. .2 jsr XDOS.VCBMountAtX bcs online1.ERR branch if there is a problem. lda #MLI.E.DUPVOL anticipate a duplicate active volume - bit duplflag exits. + bit XDOS.VCBDupFlag exits. bmi online1.ERR branch if so. -.3 ldx vcbptr +.3 ldx XDOS.VCBPtr jsr XDOS.VCBCmpGBUF does vol read compare with logged vol? lda #MLI.E.DSKSWIT anticipate wrong volume mounted. bcc online1.OK branch if ok. @@ -671,21 +789,21 @@ online1.ERR pha save error code. bne .1 no. iny report which other device has same name - ldx vcbentry - lda VCBs+VCB.DEV,x + ldx XDOS.VCBDupEnt + lda XDOS.VCBs+VCB.DEV,x sta (usrbuf),y - stz duplflag clear duplicate flag. + stz XDOS.VCBDupFlag clear duplicate flag. lda #MLI.E.DUPVOL duplicate volume error code. .1 sec flag error rts *-------------------------------------- -online1.OK lda VCBs,x get volume name count +online1.OK lda XDOS.VCBs,x get volume name count sta namcnt ldy namptr index to user's buffer. -.1 lda VCBs,x move name to user's buffer +.1 lda XDOS.VCBs,x move name to user's buffer sta (usrbuf),y inx iny @@ -693,10 +811,10 @@ online1.OK lda VCBs,x get volume name count bpl .1 svdevn ldy namptr index to 1st byte of this entry. - lda DEVNUM upper nibble = device# and + lda GP.DEVNUM upper nibble = device# and ora (usrbuf),y lower nibble = name length. sta (usrbuf),y - + clc no errors rts end of block file manager *-------------------------------------- @@ -707,14 +825,14 @@ tstfnf cmp #MLI.E.FNOTFND 'file not found' is ok bne crerr1 otherwise exit with error. ldy #$07 test for tree or directory file, - lda (A3L),y no other kinds are legal. + lda (ZP.A3L),y no other kinds are legal. cmp #$04 is it seed, sapling or tree? bcc tstdspc branch if it is cmp #$0D bne ctyperr report type error if not directory. -tstdspc lda DEVNUM make sure destination device +tstdspc lda GP.DEVNUM make sure destination device jsr twrprot1 is not write protected. bcs H351D @@ -733,20 +851,20 @@ ctyperr lda #MLI.E.UNSUPST filetype error duperr lda #MLI.E.DUPFILE name already exists crerr1 sec H351D rts - -H352A lda bloknml preserve disk address of current (last) + +H352A lda ZP.BLKNUM preserve disk address of current (last) pha directory link, before allocating an - lda bloknml+1 extended block. + lda ZP.BLKNUM+1 extended block. pha jsr alc1blk allocate a block for extending directory plx - stx bloknml+1 restore block addr of dir info in gbuf + stx ZP.BLKNUM+1 restore block addr of dir info in XDOS.GBuf plx - stx bloknml + stx ZP.BLKNUM bcs H351D unable to allocate. - sta gbuf+2 save block address in y,a to - sty gbuf+3 current directory. + sta XDOS.GBuf+2 save block address in y,a to + sty XDOS.GBuf+3 current directory. .DO LOWERCASE=1 jsr XDOS.WriteGBufDir .ELSE @@ -756,17 +874,17 @@ H352A lda bloknml preserve disk address of current (last) ldx #$01 -swpbloks lda bloknml,x prepare new directory block - sta gbuf,x using current block as back link - lda gbuf+2,x - sta bloknml,x and save new block as next to be written +swpbloks lda ZP.BLKNUM,x prepare new directory block + sta XDOS.GBuf,x using current block as back link + lda XDOS.GBuf+2,x + sta ZP.BLKNUM,x and save new block as next to be written dex bpl swpbloks inx x = 0 -clrdir stz gbuf+2,x - stz gbuf+$100,x +clrdir stz XDOS.GBuf+2,x + stz XDOS.GBuf+$100,x inx bne clrdir @@ -796,7 +914,7 @@ ocalc dex has entry address been calculated? lda own_len next entry address jsr XDOS.ZPT.NextA bra ocalc - + H3584 ldy #$13 index to block count clc @@ -818,19 +936,19 @@ H3588 lda (zpt),y jmp XDOS.Create crerr2 rts return and report errors *-------------------------------------- -creat1 ldx #$00 zero out gbuf +creat1 ldx #$00 zero out XDOS.GBuf -H35A0 stz gbuf,x - stz gbuf+$100,x and data block of file. +H35A0 stz XDOS.GBuf,x + stz XDOS.GBuf+$100,x and data block of file. inx bne H35A0 ldy #$0B move user specified date/time -cmvtime lda (A3L),y to directory. +cmvtime lda (ZP.A3L),y to directory. sta d_filid,y txa if all 4 bytes of date/time = 0 - ora (A3L),y then use built-in date/time. + ora (ZP.A3L),y then use built-in date/time. tax dey cpy #$07 @@ -841,12 +959,12 @@ cmvtime lda (A3L),y to directory. ldx #$03 -mvdftime lda p8date,x move current default date/time +mvdftime lda GP.DATE,x move current default date/time sta d_credt,x dex bpl mvdftime -cmvname lda (A3L),y y = index to file kind. +cmvname lda (ZP.A3L),y y = index to file kind. cmp #$04 lda #$10 assume tree type bcc csvfkind @@ -854,7 +972,7 @@ cmvname lda (A3L),y y = index to file kind. lda #$D0 it's directory. csvfkind ldx namptr index to local name of pathname. - ora pathbuf,x combine file kind with name length. + ora XDOS.PathBuf,x combine file kind with name length. sta d_stor sos calls this 'storage type'. and #$0F strip back to name length tay and use as counter for move. @@ -862,7 +980,7 @@ csvfkind ldx namptr index to local name of pathname. adc namptr calc end of name tax -crname lda pathbuf,x move local name as filename +crname lda XDOS.PathBuf,x move local name as filename sta d_stor,y dex @@ -870,14 +988,14 @@ crname lda pathbuf,x move local name as filename bne crname ldy #$03 index to 'access' parameter - lda (A3L),y + lda (ZP.A3L),y sta d_attr iny also move 'file identification' - lda (A3L),y + lda (ZP.A3L),y sta d_filid cmvauxid iny move auxillary identification bytes - lda (A3L),y + lda (ZP.A3L),y sta d_auxid-5,y cpy #$06 bne cmvauxid @@ -889,7 +1007,7 @@ cmvauxid iny move auxillary identification bytes lda compat and backward compatibility # sta d_comp .FIN - + lda #$01 usage is always 1 block sta d_usage lda d_head place back pointer to header block @@ -907,48 +1025,48 @@ cmvauxid iny move auxillary identification bytes ldx #$1E move header to data block cmvheadr lda d_stor,x - sta gbuf+4,x + sta XDOS.GBuf+4,x dex bpl cmvheadr eor #$30 - sta gbuf+4 make it a directory header mark. + sta XDOS.GBuf+4 make it a directory header mark. .DO LOWERCASE=0 - + ldx #$07 overwrite password area and other cmvpass lda pass,x header info. - sta gbuf+20,x + sta XDOS.GBuf+20,x lda xdosver,x - sta gbuf+32,x + sta XDOS.GBuf+32,x dex bpl cmvpass - + .ELSE lda #$75 - sta gbuf+20 - + sta XDOS.GBuf+20 + ldx #XDOS.VolHdrDef.Cnt-1 - + .1 lda XDOS.VolHdrDef,x - sta gbuf+34,x + sta XDOS.GBuf+34,x dex bpl .1 - + .FIN ldx #$02 and include info about parent directory stx d_eof+1 set file size = 512 cmvparnt lda d_entblk,x - sta gbuf+39,x + sta XDOS.GBuf+39,x dex bpl cmvparnt lda h_entln lastly, the length of parent's - sta gbuf+42 directory entries. + sta XDOS.GBuf+42 directory entries. .DO LOWERCASE=1 jsr XDOS.PackGBuf @@ -959,8 +1077,8 @@ cralcblk jsr alc1blk get address of file's data block sta d_frst sty d_frst+1 - sta bloknml - sty bloknml+1 + sta ZP.BLKNUM + sty ZP.BLKNUM+1 jsr XDOS.WriteGBuf go write data block of file bcs crerr3 @@ -974,162 +1092,6 @@ credone jsr drevise go revise directories with new file jmp upbmap lastly, update volume bitmap *-------------------------------------- -entcalc jsr XDOS.ZPT.InitGBuf - - ldx d_entnum on the entry #. - - clc - -.1 dex addr = gbuf + ((d_entnum-1) * h_entln) - beq crerr3 branch with carry clear = no errors. - - jsr XDOS.ZPT.Next - bcc .1 - -crerr3 rts carry set if error. -*-------------------------------------- -drevise lda p8date - beq drevise1 if no clock, then don't mod date/time. - - ldx #$03 - -modtime lda p8date,x move last modification date/time - sta d_moddt,x to entry being updated. - dex - bpl modtime - -drevise1 lda bkbitflg (bit 5 = backup needed) - tsb d_attr mark entry as backupable - - lda d_dev get device # of directory - sta DEVNUM to be revised - - lda d_entblk and address of directory block. - ldx d_entblk+1 - - .DO LOWERCASE=1 - jsr XDOS.ReadGBufAXDir - .ELSE - jsr XDOS.ReadGBufAX read block into general purpose buffer - .FIN - bcs crerr3 - - jsr entcalc fix up ptr to entry location within gbuf. - - ldy h_entln now move 'd.' info to directory. - dey - -.1 lda d_stor,y - sta (zpt),y - dey - bpl .1 - - lda d_head is the entry block same as - cmp bloknml the entry's header block? - bne H36E0 if no, go save entry block - - lda d_head+1 then maybe, so test high addresses. - cmp bloknml+1 - beq uphead branch if they are the same block. - -H36E0 .DO LOWERCASE=1 - jsr XDOS.WriteGBufDir - .ELSE - jsr XDOS.WriteGBuf go write updated directory block. - .FIN - bcs crerr3 - - lda d_head get address of header block and - ldx d_head+1 - - .DO LOWERCASE=1 - jsr XDOS.ReadGBufAXDir - .ELSE - jsr XDOS.ReadGBufAX go read in header block to modify. - .FIN - bcs crerr3 - -uphead ldy #$01 update current # of files in this dir. - -H36F2 lda h_fcnt,y - sta gbuf+37,y (current entry count) - dey - bpl H36F2 - - lda h_attr also update header's attributes. - sta gbuf+34 - - .DO LOWERCASE=1 - jsr XDOS.WriteGBufDir - .ELSE - jsr XDOS.WriteGBuf go write updated header - .FIN - bcs H375A -*-------------------------------------- -ripple lda gbuf+4 test for 'root' directory because - and #$F0 if it is, then directory revision - eor #$F0 is complete (leaves carry clear). - beq H3770 branch if done. - - lda gbuf+41 get entry # - sta d_entnum - lda gbuf+42 and the length of entries in that dir - sta h_entln - - lda gbuf+39 get addr of parent entry's dir block - ldx gbuf+40 - - .DO LOWERCASE=1 - jsr XDOS.ReadGBufAX no need to pak/unpak....will disturb zpt - .ELSE - jsr XDOS.ReadGBufAX read it - .FIN - bcs H375A - - jsr entcalc get indirect ptr to parent entry in gbuf - - lda p8date don't touch mod - beq H373B if no clock... - - ldx #$03 update the modification date & time - ldy #$24 for this entry too - -H3732 lda p8date,x - sta (zpt),y - dey - dex - bpl H3732 - -H373B .DO LOWERCASE=1 - jsr XDOS.WriteGBuf - .ELSE - jsr XDOS.WriteGBuf write updated entry back to disk. - .FIN - bcs H375A if error. - - ldy #$26 compare current block # to this - lda (zpt),y entry's header block. - tax - dey - lda (zpt),y block as header. - cmp bloknml are low addresses the same? - bne H3751 branch if entry doesn't reside in same - - cpx bloknml+1 are high address the same? - beq ripple they are the same, continue to root dir. - -H3751 .DO LOWERCASE=1 - jsr XDOS.ReadGBufAX - .ELSE - jsr XDOS.ReadGBufAX - .FIN - bcc ripple continue if read was good - -H375A rts - -H3770 clc no error - rts -*-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.xdos.a LOAD usr/src/prodos.fx/prodos.s diff --git a/ProDOS.FX/ProDOS.S.XDOS.B.txt b/ProDOS.FX/ProDOS.S.XDOS.B.txt index e1b305ba..9d591adf 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.B.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.B.txt @@ -1,6 +1,162 @@ NEW AUTO 3,1 *-------------------------------------- +entcalc jsr XDOS.ZPT.InitGBuf + + ldx d_entnum on the entry #. + + clc + +.1 dex addr = XDOS.GBuf + ((d_entnum-1) * h_entln) + beq crerr3 branch with carry clear = no errors. + + jsr XDOS.ZPT.Next + bcc .1 + +crerr3 rts carry set if error. +*-------------------------------------- +drevise lda GP.DATE + beq drevise1 if no clock, then don't mod date/time. + + ldx #$03 + +modtime lda GP.DATE,x move last modification date/time + sta d_moddt,x to entry being updated. + dex + bpl modtime + +drevise1 lda bkbitflg (bit 5 = backup needed) + tsb d_attr mark entry as backupable + + lda d_dev get device # of directory + sta GP.DEVNUM to be revised + + lda d_entblk and address of directory block. + ldx d_entblk+1 + + .DO LOWERCASE=1 + jsr XDOS.ReadGBufAXDir + .ELSE + jsr XDOS.ReadGBufAX read block into general purpose buffer + .FIN + bcs crerr3 + + jsr entcalc fix up ptr to entry location within XDOS.GBuf. + + ldy h_entln now move 'd.' info to directory. + dey + +.1 lda d_stor,y + sta (zpt),y + dey + bpl .1 + + lda d_head is the entry block same as + cmp ZP.BLKNUM the entry's header block? + bne H36E0 if no, go save entry block + + lda d_head+1 then maybe, so test high addresses. + cmp ZP.BLKNUM+1 + beq uphead branch if they are the same block. + +H36E0 .DO LOWERCASE=1 + jsr XDOS.WriteGBufDir + .ELSE + jsr XDOS.WriteGBuf go write updated directory block. + .FIN + bcs crerr3 + + lda d_head get address of header block and + ldx d_head+1 + + .DO LOWERCASE=1 + jsr XDOS.ReadGBufAXDir + .ELSE + jsr XDOS.ReadGBufAX go read in header block to modify. + .FIN + bcs crerr3 + +uphead ldy #$01 update current # of files in this dir. + +H36F2 lda h_fcnt,y + sta XDOS.GBuf+37,y (current entry count) + dey + bpl H36F2 + + lda h_attr also update header's attributes. + sta XDOS.GBuf+34 + + .DO LOWERCASE=1 + jsr XDOS.WriteGBufDir + .ELSE + jsr XDOS.WriteGBuf go write updated header + .FIN + bcs H375A +*-------------------------------------- +ripple lda XDOS.GBuf+4 test for 'root' directory because + and #$F0 if it is, then directory revision + eor #$F0 is complete (leaves carry clear). + beq H3770 branch if done. + + lda XDOS.GBuf+41 get entry # + sta d_entnum + lda XDOS.GBuf+42 and the length of entries in that dir + sta h_entln + + lda XDOS.GBuf+39 get addr of parent entry's dir block + ldx XDOS.GBuf+40 + + .DO LOWERCASE=1 + jsr XDOS.ReadGBufAX no need to pak/unpak....will disturb zpt + .ELSE + jsr XDOS.ReadGBufAX read it + .FIN + bcs H375A + + jsr entcalc get indirect ptr to parent entry in XDOS.GBuf + + lda GP.DATE don't touch mod + beq H373B if no clock... + + ldx #$03 update the modification date & time + ldy #$24 for this entry too + +H3732 lda GP.DATE,x + sta (zpt),y + dey + dex + bpl H3732 + +H373B .DO LOWERCASE=1 + jsr XDOS.WriteGBuf + .ELSE + jsr XDOS.WriteGBuf write updated entry back to disk. + .FIN + bcs H375A if error. + + ldy #$26 compare current block # to this + lda (zpt),y entry's header block. + tax + dey + lda (zpt),y block as header. + cmp ZP.BLKNUM are low addresses the same? + bne H3751 branch if entry doesn't reside in same + + cpx ZP.BLKNUM+1 are high address the same? + beq ripple they are the same, continue to root dir. + +H3751 .DO LOWERCASE=1 + jsr XDOS.ReadGBufAX + .ELSE + jsr XDOS.ReadGBufAX + .FIN + bcc ripple continue if read was good + +H375A rts + +H3770 clc no error + rts +*-------------------------------------- XDOS.FindDirOrVol jsr XDOS.FindFileOrVol bcs .99 @@ -62,8 +218,8 @@ XDOS.CheckPath jsr XDOS.FindVol lda #$D0 fake directory file sta d_stor - lda gbuf+2 check forward link. - ora gbuf+3 if non-zero, assume full sized directory + lda XDOS.GBuf+2 check forward link. + ora XDOS.GBuf+3 if non-zero, assume full sized directory bne .3 else assume it's the slot 3 /RAM volume lda #$02 so reset eof and blocks_used fields @@ -97,16 +253,16 @@ L37C9 stz totent reset entry counter. L37E2 dec entcnth should be at least one L37EB sta entcntl keep a running count. - lda /gbuf reset indirect pointer + lda /XDOS.GBuf reset indirect pointer sta zpt+1 - lda gbuf+2 get link to next dir block + lda XDOS.GBuf+2 get link to next dir block bne L37FC (if there is one). - cmp gbuf+3 are both zero, i.e. no link? if so, + cmp XDOS.GBuf+3 are both zero, i.e. no link? if so, beq errdir then not all entries were acct'd for. -L37FC ldx gbuf+3 acc has value for block# (low). +L37FC ldx XDOS.GBuf+3 acc has value for block# (low). .DO LOWERCASE=1 jsr XDOS.ReadGBufAXDir .ELSE @@ -117,13 +273,13 @@ L37FC ldx gbuf+3 acc has value for block# (low). *-------------------------------------- errfnf lda nofree was any free entry found? bne fnf0 - lda gbuf+2 test link + lda XDOS.GBuf+2 test link bne L3814 - cmp gbuf+3 if both are 0 then give up. + cmp XDOS.GBuf+3 if both are 0 then give up. beq fnf0 report 'not found'. L3814 sta d_entblk - lda gbuf+3 + lda XDOS.GBuf+3 sta d_entblk+1 assume 1st entry of next block lda #$01 is free for use. sta d_entnum mark as valid (for create) @@ -160,20 +316,20 @@ namfound jsr nxtpname adj index to next name in path. .DO LOWERCASE=1 jsr XDOS.ReadGBufAXDir .ELSE - jsr XDOS.ReadGBufAX read subdirectory into gbuf. + jsr XDOS.ReadGBufAX read subdirectory into XDOS.GBuf. .FIN bcs lookfil0.RTS if error. - lda gbuf+37 get the # of files contained in this + lda XDOS.GBuf+37 get the # of files contained in this sta entcntl directory. - lda gbuf+38 + lda XDOS.GBuf+38 sta entcnth *-------------------------------------- * Check if $75 at VOL/DIR entry + $14 * (8 bytes reserved) *-------------------------------------- .DO LOWERCASE=0 - lda gbuf+20 make sure password is disabled + lda XDOS.GBuf+20 make sure password is disabled ldx #$00 sec @@ -197,7 +353,7 @@ movhead jsr movhed0 move directory info. movhed0 ldx #9 move this directory info -.1 lda gbuf+$1C,x +.1 lda XDOS.GBuf+$1C,x sta h_credt,x dex bpl .1 @@ -205,14 +361,14 @@ movhed0 ldx #9 move this directory info .DO ACL=1 ldx #7 - lda gbuf+$14 + lda XDOS.GBuf+$14 cmp #$57 bne .20 - lda gbuf+$15 + lda XDOS.GBuf+$15 bne .20 -.2 lda gbuf+$14,x +.2 lda XDOS.GBuf+$14,x sta h_acl,x dex bpl .2 @@ -225,14 +381,14 @@ movhed0 ldx #9 move this directory info .21 .FIN - lda gbuf+4 if this is root, then nothing to do + lda XDOS.GBuf+4 if this is root, then nothing to do and #$F0 eor #$F0 test header type. beq .8 branch if root ldx #$03 otherwise, save owner info about -.3 lda gbuf+$27,x this header. +.3 lda XDOS.GBuf+$27,x this header. sta own_blk,x dex bpl .3 @@ -245,9 +401,9 @@ filfound lda h_maxent figure out which entry # this is adc #$00 = entry # (carry was set) sta d_entnum - lda bloknml and indicate block # of this directory + lda ZP.BLKNUM and indicate block # of this directory sta d_entblk - lda bloknml+1 + lda ZP.BLKNUM+1 sta d_entblk+1 * clc done by ADC #$00 @@ -258,7 +414,7 @@ XDOS.LookupNameInDirBlk lda h_maxent reset count of files per block sta cntent - jsr XDOS.ZPT.InitGBuf reset indirect pointer to gbuf + jsr XDOS.ZPT.InitGBuf reset indirect pointer to XDOS.GBuf bcs .4 branch if this block contains a header @@ -279,14 +435,14 @@ XDOS.LookupNameInDirBlk sta namcnt save name length as counter. ldx namptr get index to current path. - cmp pathbuf,x are both names the same length? + cmp XDOS.PathBuf,x are both names the same length? bne .4 no, inc to next entry. .3 inx (first) next letter index iny lda (zpt),y compare names letter by letter - cmp pathbuf,x + cmp XDOS.PathBuf,x bne .4 dec namcnt all letters compared? @@ -315,63 +471,63 @@ XDOS.FindVol jsr XDOS.FindVolInVCBOrDev dex bpl .1 - lda DEVNUM setup device # for this directory + lda GP.DEVNUM setup device # for this directory sta d_dev jsr movhed0 setup other header info from directory - ldy #$01 in gbuf and clean up misc info. - ldx vcbptr + ldy #$01 in XDOS.GBuf and clean up misc info. + ldx XDOS.VCBPtr inx -.2 lda VCBs+VCB.TBLK,x misc info includes +.2 lda XDOS.VCBs+VCB.TBLK,x misc info includes sta h_tblk,y total # of blocks, - lda VCBs+VCB.BMAP,x the address of the 1st bitmap, + lda XDOS.VCBs+VCB.BMAP,x the address of the 1st bitmap, sta h_bmap,y - lda bloknml,y directory's disk address, + lda ZP.BLKNUM,y directory's disk address, sta d_head,y lda h_fcnt,y and setting up a counter for the # of sta entcntl,y files in this directory. dex dey bpl .2 - +*-------------------------------------- nxtpname jsr nxtpnam1 get new namptr in y and namlen in acc. sty namptr save new pathname pointer. rts (status reg according to accumulator) - +*-------------------------------------- nxtpnam1 ldy namptr inc pathname pointer to next name - lda pathbuf,y in the path. + lda XDOS.PathBuf,y in the path. sec adc namptr if this addition results in zero, tay then prefixed directory has been moved - bne L395F to another device. branch if not. + bne .1 to another device. branch if not. - lda DEVNUM revise DEVNUM for prefixed directory + lda GP.DEVNUM revise GP.DEVNUM for prefixed directory sta p_dev -L395F lda pathbuf,y test for end of name. +.1 lda XDOS.PathBuf,y test for end of name. clc no errors novolume rts *-------------------------------------- XDOS.FindVolInVCBOrDev lda #$00 - ldy preflag use prefix volume name to look up vcb. + ldy GP.PFXPTR use prefix volume name to look up vcb. bit prfxflg is this a prefixed path? bpl L396F branch if it is tay set ptr to volume name -L396F sty vnptr and save. - sta DEVNUM zero out dev# until vcb located. +L396F sty L39D4+1 and save. + sta GP.DEVNUM zero out dev# until vcb located. - lda #VCB0 + lda #XDOS.VCB0 L3975 pha acc now used as vcb lookup index. tax index pointer to x. - lda VCBs,x get vcb volume name length. + lda XDOS.VCBs,x get vcb volume name length. bne L3987 branch if claimed vcb to be tested. -L397C ldy vnptr restore pointer to requested vol name. +L397C ldy L39D4+1 restore pointer to requested vol name. pla now adj vcb index to next vcb entry. clc adc #VCB @@ -381,33 +537,33 @@ L397C ldy vnptr restore pointer to requested vol name. L3987 sta namcnt save length of vol name to be compared. -L398A cmp pathbuf,y is it the same as requested vol name? +L398A cmp XDOS.PathBuf,y is it the same as requested vol name? bne L397C branch if not inx iny next character - lda VCBs,x + lda XDOS.VCBs,x dec namcnt last character? bpl L398A if not. plx restore pointer to matching vcb. - stx vcbptr save it for future reference. - lda VCBs+VCB.DEV,x get it's device # - sta DEVNUM and save it. + stx XDOS.VCBPtr save it for future reference. + lda XDOS.VCBs+VCB.DEV,x get it's device # + sta GP.DEVNUM and save it. lda #$02 assume prefix is not used and ldx #$00 that root directory is to be used. pha - lda vnptr = 0 if no prefix. + lda L39D4+1 = 0 if no prefix. L39AC tay if prefix then find ptr to prefixed sta namptr dir name. save path ptr. beq L39C2 branch if no prefix. sec - adc pathbuf,y inc to next dir in prefix path. + adc XDOS.PathBuf,y inc to next dir in prefix path. bcc L39AC branch if another dir in prefix. pla @@ -430,17 +586,18 @@ L39C2 pla jsr XDOS.CheckVolName compare dir name with path name. bcc L39F0 if they match, stop looking. -L39CC ldx vcbptr check if current (matched) vcb is active - lda VCBs+VCB.OFCNT,x i.e. does it have open files? +L39CC ldx XDOS.VCBPtr check if current (matched) vcb is active + lda XDOS.VCBs+VCB.OFCNT,x i.e. does it have open files? bne L39ED report not found if active. -L39D4 lda vnptr make path ptr same as volume ptr +L39D4 lda #$FF SELF MODIFIED vnptr : make path ptr same as volume ptr + sta namptr jsr mvdevnums copy all device #'s to be examined. - lda DEVNUM log current device 1st before searching + lda GP.DEVNUM log current device 1st before searching bne L39F1 others. -L39E2 ldx DEVCNT scan look list for devices we need +L39E2 ldx GP.DEVCNT scan look list for devices we need L39E5 lda loklst,x to search for the requested volume. bne L39F4 branch if we've a device to look at. @@ -452,7 +609,7 @@ L39ED lda #MLI.E.VNOTFND no mounted volume sec error L39F0 rts -L39F1 ldx DEVCNT now remove the device from the list +L39F1 ldx GP.DEVCNT now remove the device from the list L39F4 cmp loklst,x of prospective devices. beq L39FE branch if match. @@ -460,21 +617,21 @@ L39F4 cmp loklst,x of prospective devices. dex look until found. bpl L39F4 always taken (usually) unless - bmi L39ED if dev was removed from devlst (/RAM). + bmi L39ED if dev was removed from GP.DEVLST (/RAM). -L39FE sta DEVNUM preserve device to be checked next. +L39FE sta GP.DEVNUM preserve device to be checked next. stz loklst,x mark this one as tested. jsr XDOS.FindVCBForDevNum find vcb that claims this dev (if any). bcs L3A29 branch if vcb full. - lda VCBs,x did we find it or return free vcb? + lda XDOS.VCBs,x did we find it or return free vcb? beq L3A16 if free vcb. - lda VCBs+VCB.OFCNT,x is this volume active? + lda XDOS.VCBs+VCB.OFCNT,x is this volume active? bne L39E2 if so, no need to re-log. -L3A16 lda #$02 go read root dir into gbuf +L3A16 lda #$02 go read root dir into XDOS.GBuf ldx #$00 .DO LOWERCASE=1 jsr XDOS.ReadGBufAXDir @@ -490,48 +647,48 @@ L3A16 lda #$02 go read root dir into gbuf bcs L39E2 if not L3A29 rts *-------------------------------------- -mvdevnums ldx DEVCNT copy all dev #'s to be checked. +mvdevnums ldx GP.DEVCNT copy all dev #'s to be checked. -L3A2D lda DEVLST,x active device list. +.1 lda GP.DEVLST,x active device list. and #$F0 strip device type info. sta loklst,x copy them to a temp workspace dex - bpl L3A2D + bpl .1 - ldx DEVCNT + ldx GP.DEVCNT rts *-------------------------------------- XDOS.FindVCBForDevNum - lda #VCB0 look for vcb for DEVNUM + lda #XDOS.VCB0 look for vcb for GP.DEVNUM ldy #$FF .1 tax new index to next vcb - lda VCBs+VCB.DEV,x check all devnums - cmp DEVNUM is this the vcb? + lda XDOS.VCBs+VCB.DEV,x check all devnums + cmp GP.DEVNUM is this the vcb? beq .7 - lda VCBs,x is this a free vcb? + lda XDOS.VCBs,x is this a free vcb? bne .3 if not iny bne .3 already found a free one - stx vcbptr save first free VCB + stx XDOS.VCBPtr save first free VCB .3 txa clc inc index to next vcb adc #VCB bcc .1 - ldx vcbptr get found free if any + ldx XDOS.VCBPtr get found free if any tya any free vcb's available? - bpl .8 yes, exit with X = vcbptr + bpl .8 yes, exit with X = XDOS.VCBPtr - lda #VCB0 look for an entry to kick out + lda #XDOS.VCB0 look for an entry to kick out .4 tax - lda VCBs+VCB.OFCNT,x any open files? + lda XDOS.VCBs+VCB.OFCNT,x any open files? beq .5 no, kick this one out. txa next vcb @@ -543,10 +700,10 @@ XDOS.FindVCBForDevNum * sec rts -.5 stz VCBs,x free this entry - stz VCBs+VCB.DEV,x +.5 stz XDOS.VCBs,x free this entry + stz XDOS.VCBs+VCB.DEV,x -.7 stx vcbptr save entry index. +.7 stx XDOS.VCBPtr save entry index. .8 clc no error. rts @@ -555,33 +712,33 @@ XDOS.CheckVolName ldx #$00 index to directory name. ldy namptr index to pathname. - lda gbuf+4 get dir name length and type. + lda XDOS.GBuf+4 get dir name length and type. cmp #$E0 is it a directory? - bcc L3A90 if not. + bcc .1 if not. and #$0F isolate name length and sta namcnt save as a counter. - bne L3A95 branch if valid length. + bne .3 branch if valid length. -L3A90 sec indicate not found +.1 sec indicate not found rts -L3A92 lda gbuf+4,x next char +.2 lda XDOS.GBuf+4,x next char -L3A95 cmp pathbuf,y - bne L3A90 if not the same. +.3 cmp XDOS.PathBuf,y + bne .1 if not the same. inx check next char iny dec namcnt - bpl L3A92 if more to compare. + bpl .2 if more to compare. clc match found XDOS.CheckVolName.RTS rts *-------------------------------------- -XDOS.VCBMount ldx vcbptr previously logged in volume? - lda VCBs,x (acc = 0?) +XDOS.VCBMount ldx XDOS.VCBPtr previously logged in volume? + lda XDOS.VCBs,x (acc = 0?) beq XDOS.VCBMountAtX no, go prepare vcb. jsr XDOS.VCBCmpGBUF does vcb match vol read? @@ -590,16 +747,16 @@ XDOS.VCBMount ldx vcbptr previously logged in volume? XDOS.VCBMountAtX ldy #VCB zero out vcb entry -L3AB2 stz VCBs,x +L3AB2 stz XDOS.VCBs,x inx dey bne L3AB2 - lda gbuf pointer to previous dir block - ora gbuf+1 must be null + lda XDOS.GBuf pointer to previous dir block + ora XDOS.GBuf+1 must be null bne tsterr - lda gbuf+4 test for header + lda XDOS.GBuf+4 test for header and #$E0 cmp #$E0 bne tsterr @@ -607,30 +764,30 @@ L3AB2 stz VCBs,x jsr tstdupvol does a duplicate with open files bcs L3B04 already exist? branch if yes. - lda gbuf+4 move volume name to vcb. + lda XDOS.GBuf+4 move volume name to vcb. and #$0F strip root marker tay pha * clc - adc vcbptr + adc XDOS.VCBPtr tax -L3ACE lda gbuf+4,y - sta VCBs,x +L3ACE lda XDOS.GBuf+4,y + sta XDOS.VCBs,x dex dey bne L3ACE pla get length again - sta VCBs,x and save. + sta XDOS.VCBs,x and save. - lda DEVNUM last device used. - sta VCBs+VCB.DEV,x save device # and + lda GP.DEVNUM last device used. + sta XDOS.VCBs+VCB.DEV,x save device # and ldy #0 -.1 lda gbuf+39,y - sta VCBs+VCB.BMAP,x copy BMAP+TBLK +.1 lda XDOS.GBuf+39,y + sta XDOS.VCBs+VCB.BMAP,x copy BMAP+TBLK iny inx cpy #4 @@ -643,43 +800,43 @@ tsterr lda #MLI.E.NOTPRODOS not tree or dir, unrecognized type sec rts *-------------------------------------- -XDOS.VCBCmpGBUF lda gbuf+4 with name in directory. +XDOS.VCBCmpGBUF lda XDOS.GBuf+4 with name in directory. and #$0F - cmp VCBs,x are they the same length? - stx xvcbptr (see rev note #23) + cmp XDOS.VCBs,x are they the same length? + stx .1+1 xvcbptr : see rev note #23 bne .9 if not the same. tay clc - adc xvcbptr +.1 adc #$FF xvcbptr : SELF MODIFIED tax -.1 lda gbuf+4,y - cmp VCBs,x +.2 lda XDOS.GBuf+4,y + cmp XDOS.VCBs,x bne .9 if not the same. dex dey - bne .1 + bne .2 clc indicate match. .HS B0 BCS .9 sec - ldx xvcbptr offset to start of vcb (rev note #23) + ldx .1+1 xvcbptr : offset to start of vcb (rev note #23) rts *-------------------------------------- -tstdupvol lda #VCB0 check for other logged in volumes with the same name. +tstdupvol lda #XDOS.VCB0 check for other logged in volumes with the same name. L3B2C tax jsr XDOS.VCBCmpGBUF bcs L3B41 if no match. - lda VCBs+VCB.OFCNT,x test for any open files. + lda XDOS.VCBs+VCB.OFCNT,x test for any open files. bne L3B4B cannot look at this volume. - stz VCBs,x take duplicate offline if no open files - stz VCBs+VCB.DEV,x + stz XDOS.VCBs,x take duplicate offline if no open files + stz XDOS.VCBs+VCB.DEV,x * clc ok to log in new volume. rts @@ -691,14 +848,14 @@ L3B41 txa index to next vcb clc rts -L3B4B sta duplflag duplicate has been found. - stx vcbentry save pointer to conflicting vcb. +L3B4B sta XDOS.VCBDupFlag duplicate has been found. + stx XDOS.VCBDupEnt save pointer to conflicting vcb. sec error. rts *-------------------------------------- -tstfrblk ldx vcbptr test if enough free blocks available for request. - lda VCBs+VCB.FBLK+1,x check if proper count for this volume. - ora VCBs+VCB.FBLK,x +tstfrblk ldx XDOS.VCBPtr test if enough free blocks available for request. + lda XDOS.VCBs+VCB.FBLK+1,x check if proper count for this volume. + ora XDOS.VCBs+VCB.FBLK,x bne L3BAD branch if count is non-zero. tkfrecnt jsr cntbms get # of bitmaps @@ -712,12 +869,12 @@ tkfrecnt jsr cntbms get # of bitmaps jsr upbmap update volume bitmap. bcs L3BC1 if error. - ldx vcbptr get address of 1st bitmap + ldx XDOS.VCBPtr get address of 1st bitmap - lda VCBs+VCB.BMAP,x - sta bloknml - lda VCBs+VCB.BMAP+1,x - sta bloknml+1 + lda XDOS.VCBs+VCB.BMAP,x + sta ZP.BLKNUM + lda XDOS.VCBs+VCB.BMAP+1,x + sta ZP.BLKNUM+1 L3B81 jsr XDOS.ReadGBuf use general buffer for temp space to bcs L3BC1 count free blocks (bits). @@ -726,27 +883,27 @@ L3B81 jsr XDOS.ReadGBuf use general buffer for temp space to dec bmcnt was that the last bitmap? bmi L3B96 if so, go change fcb so not done again. - inc bloknml + inc ZP.BLKNUM bne L3B81 - inc bloknml+1 + inc ZP.BLKNUM+1 bra L3B81 -L3B96 ldx vcbptr mark which block had 1st free space +L3B96 ldx XDOS.VCBPtr mark which block had 1st free space lda nofree bmi L3BBE if no free space was found. - sta VCBs+VCB.BMAPIDX,x update the free count. + sta XDOS.VCBs+VCB.BMAPIDX,x update the free count. lda scrtch+1 - sta VCBs+VCB.FBLK+1,x update volume control byte. + sta XDOS.VCBs+VCB.FBLK+1,x update volume control byte. lda scrtch - sta VCBs+VCB.FBLK,x + sta XDOS.VCBs+VCB.FBLK,x -L3BAD lda VCBs+VCB.FBLK,x compare total available free blocks +L3BAD lda XDOS.VCBs+VCB.FBLK,x compare total available free blocks sec on this volume. sbc reql - lda VCBs+VCB.FBLK+1,x + lda XDOS.VCBs+VCB.FBLK+1,x sbc reqh bcc L3BBE @@ -756,15 +913,15 @@ L3BAD lda VCBs+VCB.FBLK,x compare total available free blocks L3BBE lda #MLI.E.VOLFULL sec L3BC1 rts - +*-------------------------------------- count ldy #$00 -L3BC4 lda gbuf,y bit pattern. +L3BC4 lda XDOS.GBuf,y bit pattern. beq L3BCC don't count jsr cntfree -L3BCC lda gbuf+$100,y do both pages with same loop +L3BCC lda XDOS.GBuf+$100,y do both pages with same loop beq L3BD4 jsr cntfree @@ -785,7 +942,7 @@ L3BD4 iny sta nofree L3BEE rts - +*-------------------------------------- cntfree asl count the # of bits in this byte bcc L3BFA @@ -797,10 +954,10 @@ cntfree asl count the # of bits in this byte L3BFA ora #$00 bne cntfree loop until all bits counted rts - -cntbms ldx vcbptr - ldy VCBs+VCB.TBLK+1,x return the # of bitmaps - lda VCBs+VCB.TBLK,x possible with the total count +*-------------------------------------- +cntbms ldx XDOS.VCBPtr + ldy XDOS.VCBs+VCB.TBLK+1,x return the # of bitmaps + lda XDOS.VCBs+VCB.TBLK,x possible with the total count bne L3C0B found in the vcb. dey adj for bitmap block boundary diff --git a/ProDOS.FX/ProDOS.S.XDOS.C.txt b/ProDOS.FX/ProDOS.S.XDOS.C.txt index 9070ad45..4d23ccab 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.C.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.C.txt @@ -3,8 +3,8 @@ NEW *-------------------------------------- XDOS.DeallocAX stx bmcnt high address of block. * pha save low address. - ldx vcbptr check that bitmap block address is - ldy VCBs+VCB.TBLK+1,x valid given the total # of blocks + ldx XDOS.VCBPtr check that bitmap block address is + ldy XDOS.VCBs+VCB.TBLK+1,x valid given the total # of blocks cpy bmcnt on the volume. * pla bcc L3C8C branch if invalid @@ -42,9 +42,9 @@ XDOS.DeallocAX stx bmcnt high address of block. bcs L3C8B error. lda bmcnt get map # - ldx vcbptr + ldx XDOS.VCBPtr - sta VCBs+VCB.BMAPIDX,x and make it current. + sta XDOS.VCBs+VCB.BMAPIDX,x and make it current. lda bmadev jsr gtbmap read it into buffer bcs L3C8B @@ -54,12 +54,12 @@ L3C64 ldy bmptr index to byte lda nofree (get indiviual bit) bcc bmbufhi branch if on page 1 of bitmap - ora bmbuf+$100,y - sta bmbuf+$100,y + ora XDOS.BMBuf+$100,y + sta XDOS.BMBuf+$100,y bcs L3C7D always. -bmbufhi ora bmbuf,y this address + 2 is used as an absolute reference to bmbuf high byte. - sta bmbuf,y +bmbufhi ora XDOS.BMBuf,y this address + 2 is used as an absolute reference to XDOS.BMBuf high byte. + sta XDOS.BMBuf,y L3C7D lda #$80 mark bitmap as modified tsb bmastat @@ -82,7 +82,7 @@ alc1blk jsr fndbmap get address of bitmap. L3C95 ldy #$00 begin search at start of bitmap block. sty half which half (page) to search -L3C9A lda bmbuf,y +L3C9A lda XDOS.BMBuf,y bne L3CB9 free blocks indicated by 'on' bits iny @@ -91,7 +91,7 @@ L3C9A lda bmbuf,y inc half now search page 2. inc basval base value = base address / 2048. -L3CA8 lda bmbuf+$100,y search 2nd half for free block +L3CA8 lda XDOS.BMBuf+$100,y search 2nd half for free block bne L3CB9 iny @@ -120,10 +120,10 @@ L3CB9 sty bmptr save index pointer to valid bit group. lda half beq L3CDB branch if allocating from 1st half. - lda bmbuf+$100,y get pattern from 2nd page. + lda XDOS.BMBuf+$100,y get pattern from 2nd page. bcs L3CDE always. -L3CDB lda bmbuf,y get bit pattern from 1st page. +L3CDB lda XDOS.BMBuf,y get bit pattern from 1st page. L3CDE rol find left most 'on' bit bcs L3CE4 if found. @@ -137,47 +137,47 @@ L3CE4 lsr restore pos'n of all but left most bit. ldx half which half of bitmap ? bne L3CF4 if page 2. - sta bmbuf,y + sta XDOS.BMBuf,y beq L3CF7 always. -L3CF4 sta bmbuf+$100,y update to show allocated block in use. +L3CF4 sta XDOS.BMBuf+$100,y update to show allocated block in use. L3CF7 lda #$80 indicate map is modified. tsb bmastat - ldx vcbptr subtract 1 from total free vcb blocks - lda VCBs+VCB.FBLK,x to account for newly allocated block. + ldx XDOS.VCBPtr subtract 1 from total free vcb blocks + lda XDOS.VCBs+VCB.FBLK,x to account for newly allocated block. bne .7 - dec VCBs+VCB.FBLK+1,x -.7 dec VCBs+VCB.FBLK,x + dec XDOS.VCBs+VCB.FBLK+1,x +.7 dec XDOS.VCBs+VCB.FBLK,x lda scrtch return address in y,a of newly ldy scrtch+1 allocated block. clc no errors. rts *-------------------------------------- -nxtbmap ldx vcbptr inc to next bitmap, but 1st make sure there is another one. - lda VCBs+VCB.TBLK+1,x +nxtbmap ldx XDOS.VCBPtr inc to next bitmap, but 1st make sure there is another one. + lda XDOS.VCBs+VCB.TBLK+1,x lsr lsr lsr lsr - cmp VCBs+VCB.BMAPIDX,x are there more maps ? + cmp XDOS.VCBs+VCB.BMAPIDX,x are there more maps ? beq L3D60 if no more to look at. - inc VCBs+VCB.BMAPIDX,x add 1 to current map + inc XDOS.VCBs+VCB.BMAPIDX,x add 1 to current map jsr upbmap -fndbmap ldy vcbptr - lda VCBs+VCB.DEV,y get device #. +fndbmap ldy XDOS.VCBPtr + lda XDOS.VCBs+VCB.DEV,y get device #. cmp bmadev does this map match this device ? beq L3D4A yes. jsr upbmap otherwise, save other volume's bitmap bcs L3D5F - ldy vcbptr - lda VCBs+VCB.DEV,y + ldy XDOS.VCBPtr + lda XDOS.VCBs+VCB.DEV,y sta bmadev and read in fresh bitmap for this dev. L3D4A ldy bmastat is it already modified ? @@ -186,8 +186,8 @@ L3D4A ldy bmastat is it already modified ? jsr gtbmap otherwise read in fresh bitmap. bcs L3D5F if error. -L3D54 ldy vcbptr get relative block # of bitmap. - lda VCBs+VCB.BMAPIDX,y +L3D54 ldy XDOS.VCBPtr get relative block # of bitmap. + lda XDOS.VCBs+VCB.BMAPIDX,y asl 2 pages per block sta basval @@ -211,14 +211,14 @@ upbmap clc *-------------------------------------- gtbmap sta bmadev read bitmap specified by dev and vcb. - ldy vcbptr get lowest map # with free blocks in it - lda VCBs+VCB.BMAPIDX,y + ldy XDOS.VCBPtr get lowest map # with free blocks in it + lda XDOS.VCBs+VCB.BMAPIDX,y sta bmacmap associate offset with bitmap ctrl block. clc add this # to the base address of - adc VCBs+VCB.BMAP,y 1st bitmap and save in bmadadr which + adc XDOS.VCBs+VCB.BMAP,y 1st bitmap and save in bmadadr which sta bmadadr is address of bitmap to be used. - lda VCBs+VCB.BMAP+1,y + lda XDOS.VCBs+VCB.BMAP+1,y adc #$00 sta bmadadr+1 @@ -226,23 +226,23 @@ gtbmap sta bmadev read bitmap specified by dev and vcb. .HS 2C BIT ABS wrtbmap lda #$02 write command. - sta A4L + sta ZP.CMDNUM - lda DEVNUM save current dev # + lda GP.DEVNUM save current dev # pha lda bmadev get bitmap's dev # - sta DEVNUM + sta GP.DEVNUM lda bmadadr and disk address - sta bloknml + sta ZP.BLKNUM lda bmadadr+1 - sta bloknml+1 + sta ZP.BLKNUM+1 - lda /bmbuf + lda /XDOS.BMBuf * lda bmbufhi+2 address of the buffer (low = 0) jsr XDOS.RWBlock plx keep A=error code if CS - stx DEVNUM + stx GP.DEVNUM L3DB6 rts *-------------------------------------- @@ -253,7 +253,7 @@ XDOS.WriteGBufDir .FIN *-------------------------------------- XDOS.ReadGBuf_d_frst - lda d_frst read 1st block of directory into gbuf + lda d_frst read 1st block of directory into XDOS.GBuf ldx d_frst+1 .DO LOWERCASE=1 XDOS.ReadGBufAXDir @@ -261,35 +261,35 @@ XDOS.ReadGBufAXDir bcc XDOS.UnpackGBuf rts .FIN -XDOS.ReadGBufAX sta bloknml - stx bloknml+1 +XDOS.ReadGBufAX sta ZP.BLKNUM + stx ZP.BLKNUM+1 XDOS.ReadGBuf lda #$01 read command. .HS 2C BIT ABS XDOS.WriteGBuf lda #$02 write command - sta A4L pass to device handler. - lda /gbuf general buffer. + sta ZP.A4L pass to device handler. + lda /XDOS.GBuf general buffer. -XDOS.RWBlock sta buf+1 buffer high. - stz buf buffer low (always on page boundary) +XDOS.RWBlock sta ZP.BUFPTR+1 buffer high. + stz ZP.BUFPTR buffer low (always on page boundary) - stz p8error clear global error code. + stz GP.ERROR clear global error code. lda #$FF indicates reg call made to dev handler sta ioaccess + lda GP.DEVNUM transfer dev # for dispatcher to + sta ZP.UNITNUM convert to unit #. - lda DEVNUM transfer dev # for dispatcher to - sta unitnum convert to unit #. jmp XDOS.DevCall call the driver. *-------------------------------------- .DO LOWERCASE=1 XDOS.CheckAndUnpackGBuf - lda gbuf+$23 + lda XDOS.GBuf+$23 sta h_entln - ldy gbuf+$24 + ldy XDOS.GBuf+$24 sty h_maxent cmp #$27 bne .9 @@ -379,8 +379,8 @@ XDOS.GetMark ldx fcbptr index to open fcb. ldy #$02 index to user's mark parameter. -.1 lda FCBs+FCB.MARK,x transfer current position - sta (A3L),y to user's parameter list +.1 lda XDOS.FCBs+FCB.MARK,x transfer current position + sta (ZP.A3L),y to user's parameter list inx iny cpy #$05 transfer 3 bytes @@ -399,11 +399,11 @@ XDOS.SetMark ldy #$04 index to user's desired position. inx sec indicate comparisons are necessary. -.1 lda (A3L),y move it to 'tpos' +.1 lda (ZP.A3L),y move it to 'tpos' sta tposll-2,y bcc .2 branch if mark < eof - cmp FCBs+FCB.EOF,x + cmp XDOS.FCBs+FCB.EOF,x bcc .2 branch if mark qualifies. bne L3DFD branch if mark > eof (invalid position) @@ -416,7 +416,7 @@ XDOS.SetMark ldy #$04 index to user's desired position. bne .1 branch if more. rdposn ldy fcbptr test to see if new position is - lda FCBs+FCB.MARK+1,y within the same (current) data block. + lda XDOS.FCBs+FCB.MARK+1,y within the same (current) data block. and #$FE sta scrtch lda tposlh middle byte of new position @@ -429,12 +429,12 @@ rdposn ldy fcbptr test to see if new position is bcs L3E44 of current position. lda tposhi make sure within the same 64k. - cmp FCBs+FCB.MARK+2,y + cmp XDOS.FCBs+FCB.MARK+2,y bne L3E44 branch if not. jmp svmark if so, adj fcb, position ptr and return. -L3E44 lda FCBs+FCB.STYPE,y determine file type for positioning. +L3E44 lda XDOS.FCBs+FCB.STYPE,y determine file type for positioning. beq L3E50 0 = invalid file type. cmp #$04 tree class file? @@ -443,14 +443,14 @@ L3E44 lda FCBs+FCB.STYPE,y determine file type for positioning. jmp dirmark no, test for dir type. L3E50 ldy #$A4 clear illegal filetype entry in fcb - sta FCBs,y + sta XDOS.FCBs,y lda #MLI.E.BADREF and report error sec rts -L3E59 lda FCBs+FCB.STYPE,y use storage type as # of index levels +L3E59 lda XDOS.FCBs+FCB.STYPE,y use storage type as # of index levels sta levels since 1=seed, 2=sapling, 3=tree. - lda FCBs+FCB.F,y + lda XDOS.FCBs+FCB.F,y and #FCB.F.DBLKMOD if previous data was modified then beq L3E6B disk must be updated. @@ -459,7 +459,7 @@ L3E59 lda FCBs+FCB.STYPE,y use storage type as # of index levels bcs L3ED4 if error. L3E6B ldy fcbptr test to see if current index block - lda FCBs+FCB.MARK+2,y is usable by checking if new + lda XDOS.FCBs+FCB.MARK+2,y is usable by checking if new and #$FE position is within 128k of the sta scrtch beginning of current sapling level lda tposhi chunk. @@ -479,12 +479,12 @@ L3E89 lda tposlh is new position < 512 ? ora tposhi bne L3EEF no, mark both data and index block as - lda FCBs+FCB.1stBLK,y unallocated. 1st block is only block - sta bloknml and it's data. - lda FCBs+FCB.1stBLK+1,y high block address. + lda XDOS.FCBs+FCB.1stBLK,y unallocated. 1st block is only block + sta ZP.BLKNUM and it's data. + lda XDOS.FCBs+FCB.1stBLK+1,y high block address. jmp rnewpos go read in block and set statuses. -L3E9D lda FCBs+FCB.F,y check to see if previous index block +L3E9D lda XDOS.FCBs+FCB.F,y check to see if previous index block and #FCB.F.IBLKMOD was modified. beq L3EA9 read in over it if current up to date. @@ -536,15 +536,15 @@ posindex jsr XDOS.ClrFCBStatus clr all alloc requirements for previous L3EEF lda #$03 show neither index or data block alloc'd bra L3F18 -saplevel sta bloknml read in next lower index block. +saplevel sta ZP.BLKNUM read in next lower index block. lda (zpt),y (high address) - sta bloknml+1 + sta ZP.BLKNUM+1 dec zpt+1 * jsr rfcbidx read in sapling level lda #$01 prepare to read index block : read command - sta A4L + sta ZP.CMDNUM ldx #zpt address of current index buffer. @@ -591,11 +591,11 @@ L3F49 sta (datptr),y dec datptr+1 rts *-------------------------------------- -L3F51 sta bloknml get data block of new position +L3F51 sta ZP.BLKNUM get data block of new position lda (zpt),y (high address) dec zpt+1 -rnewpos sta bloknml+1 +rnewpos sta ZP.BLKNUM+1 jsr XDOS.ReadFCB.DBLK bcs L3F86 if error. @@ -606,10 +606,10 @@ svmark ldy fcbptr update position in fcb iny ldx #$02 -L3F68 lda FCBs+FCB.MARK,y save old mark in case calling routine +L3F68 lda XDOS.FCBs+FCB.MARK,y save old mark in case calling routine sta oldmark,x fails later. lda tposll,x - sta FCBs+FCB.MARK,y + sta XDOS.FCBs+FCB.MARK,y dey dex move 3 byte position marker bpl L3F68 @@ -627,16 +627,16 @@ dirmark cmp #$0D is it a directory ? beq L3F9C yes... lda #MLI.E.INCFF no, so compatability problem. - jsr GP.P8errv should not have been opened !!! + jsr GP.SYSERR should not have been opened !!! L3F9C lda scrtch recover results of previous subtraction. lsr use difference as counter for how many sta cntent blocks must be read to get to new pos'n. - lda FCBs+FCB.MARK+1,y test for positive direction + lda XDOS.FCBs+FCB.MARK+1,y test for positive direction cmp tposlh indicated by carry. - lda FCBs+FCB.MARK+2,y + lda XDOS.FCBs+FCB.MARK+2,y sbc tposhi bcc L3FB9 if set, position forward. otherwise, @@ -660,7 +660,7 @@ L3FB9 ldy #$02 position is forward from current. beq svmark branch always. *-------------------------------------- dirpos1 lda (datptr),y get link address of previous or next - sta bloknml directory block. + sta ZP.BLKNUM directory block. cmp #$01 test for null byte into carry iny but first be sure there is a link. lda (datptr),y get the rest of the link. @@ -674,11 +674,11 @@ dirpos1 lda (datptr),y get link address of previous or next L3FD6 rts -L3FD8 sta bloknml+1 +L3FD8 sta ZP.BLKNUM+1 *-------------------------------------- XDOS.ReadFCB.DBLK lda #$01 read command - sta A4L + sta ZP.CMDNUM ldx #datptr points at address of data buffer. @@ -686,17 +686,17 @@ XDOS.ReadFCB.DBLK bcs L3FF2 error. ldy fcbptr - lda bloknml - sta FCBs+FCB.DBLK,y save block # just read in fcb. - lda bloknml+1 - sta FCBs+FCB.DBLK+1,y + lda ZP.BLKNUM + sta XDOS.FCBs+FCB.DBLK,y save block # just read in fcb. + lda ZP.BLKNUM+1 + sta XDOS.FCBs+FCB.DBLK+1,y * clc L3FF2 rts *-------------------------------------- *rfcbidx lda #$01 prepare to read index block : read command -* sta A4L +* sta ZP.CMDNUM * ldx #zpt address of current index buffer. @@ -704,10 +704,10 @@ L3FF2 rts * bcs L400C error * ldy fcbptr -* lda bloknml -* sta FCBs+FCB.IBLK,y save block address of this index in fcb -* lda bloknml+1 -* sta FCBs+FCB.IBLK+1,y +* lda ZP.BLKNUM +* sta XDOS.FCBs+FCB.IBLK,y save block address of this index in fcb +* lda ZP.BLKNUM+1 +* sta XDOS.FCBs+FCB.IBLK+1,y ** clc @@ -728,33 +728,33 @@ rfcbfst lda #$01 read command. ldx #zpt rd block into index portion of file buf *-------------------------------------- -dofileio sta A4L command +dofileio sta ZP.CMDNUM command - lda FCBs,y get disk block address from fcb. - sta bloknml block 0 not legal + lda XDOS.FCBs,y get disk block address from fcb. + sta ZP.BLKNUM block 0 not legal bne .1 - lda FCBs+1,y high address of disk block + lda XDOS.FCBs+1,y high address of disk block bne .2 lda #$0C Block = $0000, allocation error. - jsr GP.SysDeath doesn't return... + jsr GP.SYSDEATH doesn't return... -.1 lda FCBs+1,y -.2 sta bloknml+1 +.1 lda XDOS.FCBs+1,y +.2 sta ZP.BLKNUM+1 *-------------------------------------- fileio1 lda $00,x get memory address of buffer from - sta buf page zero pointed to by x register + sta ZP.BUFPTR page zero pointed to by x register lda $01,x - sta buf+1 and pass address to device handler + sta ZP.BUFPTR+1 and pass address to device handler jsr XDOS.FCBDevIDSelect lda #$FF also, set to indicate reg call made to sta ioaccess device handler. - lda DEVNUM transfer device # for dispatcher - sta unitnum to convert to unit #. - stz p8error clear global error code. + lda GP.DEVNUM transfer device # for dispatcher + sta ZP.UNITNUM to convert to unit #. + stz GP.ERROR clear global error code. jmp XDOS.DevCall call the driver. *-------------------------------------- wfcbdat ldx #datptr point at memory address with x and @@ -782,8 +782,8 @@ wfcbidx jsr upbmap update bitmap. *-------------------------------------- XDOS.ResetFCBStatus ldx fcbptr - and FCBs+FCB.F,x - sta FCBs+FCB.F,x + and XDOS.FCBs+FCB.F,x + sta XDOS.FCBs+FCB.F,x L4096 rts *-------------------------------------- @@ -808,7 +808,7 @@ L40AD lda fcbflg if this byte <> 0 then free fcb found L40B9 ldy #FCB -L40BD stz FCBs,x but clean it first. +L40BD stz XDOS.FCBs,x but clean it first. inx dey bne L40BD @@ -818,7 +818,7 @@ L40BD stz FCBs,x but clean it first. ldx fcbptr L40CB lda d_dev,y move ownership info. - sta FCBs+FCB.DEVID,x note: this code depends upon the defined + sta XDOS.FCBs+FCB.DEVID,x note: this code depends upon the defined inx order of both the fcb and directory entry buffer. iny cpy #6 @@ -835,7 +835,7 @@ L40CB lda d_dev,y move ownership info. and #$01 read enabled bit -L40EB sta FCBs+FCB.ACCESS,y +L40EB sta XDOS.FCBs+FCB.ACCESS,y and #$02 check for write enabled request. beq L40F7 branch for open as read-only @@ -850,33 +850,33 @@ L40F7 cpx #$04 is it a tree file type ? L40FF ldx #$06 move address of 1st block of file, end -L4101 sta bloknml+1 of file and current usage count. +L4101 sta ZP.BLKNUM+1 of file and current usage count. lda fcbptr ora ofcbtbl,x this is done via a translation table tay between directory info and fcb. lda d_frst,x - sta FCBs,y + sta XDOS.FCBs,y dex bpl L4101 last loop stores hi address of 1st block - sta bloknml and this is the low one. + sta ZP.BLKNUM and this is the low one. ldx fcbptr lda cntent this was set up by 'tstopen'. - sta FCBs,x claim fcb for this file. + sta XDOS.FCBs,x claim fcb for this file. jsr alcbuffr go allocate buffer in memory tables. bcs L4147 if errors. ldx fcbptr jsr XDOS.GetFCBBufX rtn addr of bufs in data & index ptrs. - lda flevel mark level at which - sta FCBs+FCB.FLEVEL,x file was opened. + lda GP.FLEVEL mark level at which + sta XDOS.FCBs+FCB.FLEVEL,x file was opened. - lda FCBs+FCB.STYPE,x file must be positioned at beginning. + lda XDOS.FCBs+FCB.STYPE,x file must be positioned at beginning. cmp #$04 is it a tree file ? bcs L415E no, assume a directory. lda #$FF fool the position routine into giving - sta FCBs+FCB.MARK+2,x a valid position with preloaded data, + sta XDOS.FCBs+FCB.MARK+2,x a valid position with preloaded data, ldy #$02 etc. set desired position to 0. lda #$00 @@ -891,8 +891,8 @@ L413C sta tposll,y L4147 pha save error code. ldx fcbptr free buffer space. - stz FCBs,x necessary to release fcb also. - lda FCBs+FCB.BUFID,x + stz XDOS.FCBs,x necessary to release fcb also. + lda XDOS.FCBs+FCB.BUFID,x beq L4156 if no bufnum, ok because never alloc'd. jsr relbuffr go release buffer. @@ -904,13 +904,13 @@ L4156 pla error code. L415E jsr XDOS.ReadFCB.DBLK read in 1st block of directory file. bcs L4147 return error after freeing buffer & fcb. -L4163 ldx vcbptr index to vcb. - inc VCBs+VCB.OFCNT,x add 1 to # of files currently open +L4163 ldx XDOS.VCBPtr index to vcb. + inc XDOS.VCBs+VCB.OFCNT,x add 1 to # of files currently open ldx fcbptr index to fcb. - lda FCBs+FCB.ID,x return ref # to user. + lda XDOS.FCBs+FCB.ID,x return ref # to user. ldy #$05 - sta (A3L),y + sta (ZP.A3L),y * clc open is successful rts *-------------------------------------- @@ -926,7 +926,7 @@ L4188 tay index to next fcb. inc cntent -L4191 lda FCBs,y is this fcb in use ? +L4191 lda XDOS.FCBs,y is this fcb in use ? bne L41A3 yes. txa if not, should we claim it ? @@ -942,7 +942,7 @@ L41A3 tya add offset to index to ownership info tay and put it back in y. ldx #$06 index to directory entry owner info. -L41A9 lda FCBs,y all bytes must match to say that it's +L41A9 lda XDOS.FCBs,y all bytes must match to say that it's cmp d_dev-1,x the same file again. bne L41C1 if not, then next fcb. @@ -951,7 +951,7 @@ L41A9 lda FCBs,y all bytes must match to say that it's bne L41A9 loop to check all owner info. inc totent file is already open, now see - lda FCBs+FCB.ACCESS,y if it's already opened for write. and #$02 if so report file busy (with carry set). + lda XDOS.FCBs+FCB.ACCESS,y if it's already opened for write. and #$02 if so report file busy (with carry set). and #$02 if so report file busy (with carry set). beq L41C1 branch if this file is read access only. @@ -969,10 +969,10 @@ L41C1 tya calc position of next fcb. *-------------------------------------- XDOS.UpdateFCBIBlk ldy fcbptr - lda bloknml - sta FCBs+FCB.IBLK,y save block address of this index in fcb - lda bloknml+1 - sta FCBs+FCB.IBLK+1,y + lda ZP.BLKNUM + sta XDOS.FCBs+FCB.IBLK,y save block address of this index in fcb + lda ZP.BLKNUM+1 + sta XDOS.FCBs+FCB.IBLK+1,y rts *-------------------------------------- MAN diff --git a/ProDOS.FX/ProDOS.S.XDOS.D.txt b/ProDOS.FX/ProDOS.S.XDOS.D.txt index 2d03c030..294d0616 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.D.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.D.txt @@ -12,11 +12,11 @@ XDOS.Read jsr mvdbufr xfer buffer address and request count bcc L4205 branch if result mark < eof. adjust ldy fcbptr request to read until just before eof. - lda FCBs+FCB.EOF,y result = (eof-1) - position + lda XDOS.FCBs+FCB.EOF,y result = (eof-1) - position sbc tposll sta cbytes sta rwreql - lda FCBs+FCB.EOF+1,y + lda XDOS.FCBs+FCB.EOF+1,y sbc tposlh sta cbytes+1 sta rwreqh @@ -96,7 +96,7 @@ L427B bcs L4249 jsr XDOS.Tpos2Y get index to next block address lda (zpt),y get low address - sta bloknml + sta ZP.BLKNUM inc zpt+1 cmp (zpt),y are hi and low address the same? bne L4299 no, it's a real block address. @@ -112,12 +112,12 @@ L4299 lda (zpt),y get high address L429C dec zpt+1 bcs L4249 if no block to read. - sta bloknml+1 + sta ZP.BLKNUM+1 lda ioaccess has 1st call gone to device yet ? beq L4249 no, go thru normal route lda datptr+1 reset hi buffer address for dev handler - sta buf+1 + sta ZP.BUFPTR+1 jsr XDOS.DevCall bcc L424E no errors, branch always. @@ -135,11 +135,11 @@ rwdone ldy #$06 return total # of bytes actually read sec derived from cbytes-rwreq. lda cbytes sbc rwreql - sta (A3L),y + sta (ZP.A3L),y iny lda cbytes+1 sbc rwreqh - sta (A3L),y + sta (ZP.A3L),y jmp rdposn leave with valid position in fcb. *-------------------------------------- preprw ldy fcbptr adj pointer to user's buffer to make @@ -148,14 +148,16 @@ preprw ldy fcbptr adj pointer to user's buffer to make sbc tposll sta usrbuf bcs L42E9 if no adjustment to hi address needed + dec usrbuf+1 -L42E9 lda FCBs+FCB.NLMASK,y test for new line enabled. +L42E9 lda XDOS.FCBs+FCB.NLMASK,y test for new line enabled. clc beq L42F9 if new line not enabled. + sec carry indicates new line enabled sta nlmask - lda FCBs+FCB.NLBYTE,y move newline character to more + lda XDOS.FCBs+FCB.NLBYTE,y move newline character to more sta nlchar accesible spot. L42F9 ldy tposll index to 1st data. @@ -278,9 +280,9 @@ XDOS.ReadDir jsr rdposn ldy #$00 provide dummy back pointer for future ldx fcbptr re-position. x = hi byte of last block -L43A6 lda FCBs+FCB.DBLK,x +L43A6 lda XDOS.FCBs+FCB.DBLK,x sta (datptr),y - stz FCBs+FCB.DBLK,x mark current block as impossible + stz XDOS.FCBs+FCB.DBLK,x mark current block as impossible inx iny inc indexes to do both hi and low bytes cpy #$02 @@ -292,27 +294,27 @@ L43B7 rts L43B8 jmp errfix1 report how much xfer'd before error. *-------------------------------------- mvcbytes ldy #$04 move request count to a more accessable location - lda (A3L),y + lda (ZP.A3L),y sta cbytes sta rwreql iny - lda (A3L),y + lda (ZP.A3L),y sta cbytes+1 sta rwreqh ldy fcbptr return y = val(fcbptr), - lda FCBs+FCB.ACCESS,y a = attributes + lda XDOS.FCBs+FCB.ACCESS,y a = attributes clc and carry clear... rts *-------------------------------------- mvdbufr ldy #$02 move the pointer to user's buffer - lda (A3L),y to the block file manager + lda (ZP.A3L),y to the block file manager sta usrbuf z-page area iny - lda (A3L),y + lda (ZP.A3L),y sta usrbuf+1 gfcbstyp ldy fcbptr return storage type - lda FCBs+FCB.STYPE,y + lda XDOS.FCBs+FCB.STYPE,y rts *-------------------------------------- * this subroutine adds the requested byte count to mark and returns sum @@ -325,7 +327,7 @@ gfcbstyp ldy fcbptr return storage type calcmrk ldx #$00 ldy fcbptr clc -L43EE lda FCBs+FCB.MARK,y +L43EE lda XDOS.FCBs+FCB.MARK,y sta tposll,x sta oldmark,x adc cbytes,x @@ -339,7 +341,7 @@ L43EE lda FCBs+FCB.MARK,y bne L43EE always. eoftest lda scrtch,x new mark in scrtch. - cmp FCBs+FCB.EOF,y is new position > eof ? + cmp XDOS.FCBs+FCB.EOF,y is new position > eof ? bcc L4414 no, proceed. bne L4414 yes, adjust 'cbytes' request @@ -352,9 +354,9 @@ L4414 rts werreof jsr plus2fcb reset eof to pre-error position. L4418 lda oldeof,x place oldeof back into fcb - sta FCBs+FCB.EOF,y + sta XDOS.FCBs+FCB.EOF,y lda oldmark,x also reset mark to last best - sta FCBs+FCB.MARK,y write position + sta XDOS.FCBs+FCB.MARK,y write position sta scrtch,x and copy mark to scrtch for test of dey eof less than mark. dex @@ -367,12 +369,12 @@ L4418 lda oldeof,x place oldeof back into fcb wadjeof jsr plus2fcb get y=fcbptr+2, x=2, a=y. -L4434 lda FCBs+FCB.EOF,y copy eof to old eof +L4434 lda XDOS.FCBs+FCB.EOF,y copy eof to old eof sta oldeof,x bcc L4442 and if carry set... lda scrtch,x then copy scrtch to fcb's eof. - sta FCBs+FCB.EOF,y + sta XDOS.FCBs+FCB.EOF,y L4442 dey dex copy all 3 bytes @@ -468,9 +470,9 @@ L44B8 jsr alcwblk go allocate for data block. sta (zpt),y store low address. ldy fcbptr update fcb to indicate that this block - sta FCBs+FCB.DBLK,y is allocated. + sta XDOS.FCBs+FCB.DBLK,y is allocated. txa get high address again. - sta FCBs+FCB.DBLK+1,y + sta XDOS.FCBs+FCB.DBLK+1,y L44E9 jsr preprw jsr wrtpart @@ -583,9 +585,9 @@ L457A jsr alcwblk get another block address for the sap sta (zpt),y save hi address dec zpt+1 ldy fcbptr make newly allocated block the current - sta FCBs+FCB.IBLK+1,y index block. + sta XDOS.FCBs+FCB.IBLK+1,y index block. txa - sta FCBs+FCB.IBLK,y + sta XDOS.FCBs+FCB.IBLK,y jsr wfcbfst save new top of tree bcs L45B1 *-------------------------------------- @@ -617,18 +619,18 @@ swapdown jsr alcwblk make current seed into a sapling, allocate a block befo bcs .9 return errors. ldy fcbptr get previous first block - lda FCBs+FCB.1stBLK,y address into index block. + lda XDOS.FCBs+FCB.1stBLK,y address into index block. pha save temporarily while swapping in new lda scrtch top index. get new block address (low) tax - sta FCBs+FCB.1stBLK,y - lda FCBs+FCB.1stBLK+1,y + sta XDOS.FCBs+FCB.1stBLK,y + lda XDOS.FCBs+FCB.1stBLK+1,y pha lda scrtch+1 and high address too - sta FCBs+FCB.1stBLK+1,y - sta FCBs+FCB.IBLK+1,y make new top also the current index in + sta XDOS.FCBs+FCB.1stBLK+1,y + sta XDOS.FCBs+FCB.IBLK+1,y make new top also the current index in txa memory. get low address again. - sta FCBs+FCB.IBLK,y + sta XDOS.FCBs+FCB.IBLK,y inc zpt+1 make previous the 1st entry in sub index pla sta (zpt) @@ -641,7 +643,7 @@ swapdown jsr alcwblk make current seed into a sapling, allocate a block befo lda #FCB.F.STMOD jsr XDOS.SetFCBStatus - inc FCBs+FCB.STYPE,x + inc XDOS.FCBs+FCB.STYPE,x * clc no error .9 rts @@ -652,10 +654,10 @@ alcwblk jsr alc1blk lda #FCB.F.UMOD jsr XDOS.SetFCBStatus - inc FCBs+FCB.UBLK,x + inc XDOS.FCBs+FCB.UBLK,x bne .9 - inc FCBs+FCB.UBLK+1,x + inc XDOS.FCBs+FCB.UBLK+1,x .9 rts *-------------------------------------- @@ -666,15 +668,15 @@ tstwprot jsr XDOS.GetFCBStatus check for 'never been modified' condition jsr XDOS.FCBDevIDSelect -twrprot1 sta unitnum make the device status call +twrprot1 sta ZP.UNITNUM make the device status call - lda bloknml+1 + lda ZP.BLKNUM+1 pha - lda bloknml save the current block values + lda ZP.BLKNUM save the current block values pha - stz A4L - stz bloknml zero the block # - stz bloknml+1 + stz ZP.CMDNUM + stz ZP.BLKNUM zero the block # + stz ZP.BLKNUM+1 jsr XDOS.DevCall bcs .1 branch if write protect error @@ -682,9 +684,9 @@ twrprot1 sta unitnum make the device status call lda #$00 otherwise, assume no errors. .1 plx - stx bloknml restore the block # + stx ZP.BLKNUM restore the block # plx - stx bloknml+1 + stx ZP.BLKNUM+1 tstwprot.RTS rts *-------------------------------------- diff --git a/ProDOS.FX/ProDOS.S.XDOS.E.txt b/ProDOS.FX/ProDOS.S.XDOS.E.txt index ad6244a9..e050cece 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.E.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.E.txt @@ -2,7 +2,7 @@ NEW AUTO 3,1 *-------------------------------------- XDOS.Close ldy #$01 close all ? - lda (A3L),y + lda (ZP.A3L),y bne XDOS.CloseOne no, just one of them. sta cferr clear global close error. @@ -10,11 +10,11 @@ XDOS.Close ldy #$01 close all ? L4654 sta fcbptr save current low byte of pointer. tax get the level at which the file - lda FCBs+FCB.FLEVEL,x was opened. - cmp flevel if file's level is < global level + lda XDOS.FCBs+FCB.FLEVEL,x was opened. + cmp GP.FLEVEL if file's level is < global level bcc L4675 then don't close. - lda FCBs+FCB.ID,x is this reference file open ? + lda XDOS.FCBs+FCB.ID,x is this reference file open ? beq L4675 no, try next. jsr flush2 clean it out... @@ -23,7 +23,7 @@ L4654 sta fcbptr save current low byte of pointer. jsr close2 update fcb & vcb ldy #$01 - lda (A3L),y + lda (ZP.A3L),y beq L4675 no error if close all. bcs L46B6 close error. @@ -51,17 +51,17 @@ XDOS.CloseOne jsr flush1 flush file 1st (including updating bitmap) rts close2 ldx fcbptr - lda FCBs+FCB.BUFID,x release file buffer + lda XDOS.FCBs+FCB.BUFID,x release file buffer jsr relbuffr bcs L46B6 jsr XDOS.FCBDevIDSelect - stz FCBs,x free fcb too + stz XDOS.FCBs,x free fcb too jsr XDOS.FindVCBForDevNum get vcb pointer. - dec VCBs+VCB.OFCNT,x indicate one less file open. + dec XDOS.VCBs+VCB.OFCNT,x indicate one less file open. L46B4 clc rts @@ -69,7 +69,7 @@ L46B4 clc L46B6 bcs L46E6 don't report close all error now. *-------------------------------------- XDOS.Flush ldy #$01 flush all ? - lda (A3L),y + lda (ZP.A3L),y bne flush1 no, just one of them. sta cferr clear global flush error. @@ -77,7 +77,7 @@ XDOS.Flush ldy #$01 flush all ? L46C3 sta fcbptr save current low byte of pointer. tax index to ref #. - lda FCBs,x is this reference file open ? + lda XDOS.FCBs,x is this reference file open ? beq L46D1 no, try next. jsr flush2 clean it out... @@ -104,11 +104,11 @@ flush1 stz cferr for normal refnum flush, clear global error. jsr XDOS.GetFCB setup pointer to fcb user references. bcs L46E6 return any errors. -L46F1 lda FCBs+FCB.ACCESS,x test to see if file is modified. +L46F1 lda XDOS.FCBs+FCB.ACCESS,x test to see if file is modified. and #$02 is it write enabled ? beq L46D9 branch if 'read only' - lda FCBs+FCB.DIRTY,x has eof been modified ? + lda XDOS.FCBs+FCB.DIRTY,x has eof been modified ? bmi L4704 if yes. jsr XDOS.GetFCBStatus has data been modified ? @@ -133,7 +133,7 @@ L471C ldy #0 jsr XDOS.FCBDevIDSelect X = FCBPtr -L4723 lda FCBs+FCB.DEVID,x note: this code depends on the defined +L4723 lda XDOS.FCBs+FCB.DEVID,x note: this code depends on the defined sta d_dev,y order of the file control block and the inx temporary directory area in 'work space' iny @@ -169,26 +169,26 @@ L4755 jsr entcalc set up pointer to entry. jsr moventry move entry to temp entry buffer in ldx fcbptr 'work space'. update 'blocks used' count - lda FCBs+FCB.UBLK,x + lda XDOS.FCBs+FCB.UBLK,x sta d_usage - lda FCBs+FCB.UBLK+1,x + lda XDOS.FCBs+FCB.UBLK+1,x sta d_usage+1 ldy #0 and move in end of file mark whether -L476C lda FCBs+FCB.EOF,x needed or not. +L476C lda XDOS.FCBs+FCB.EOF,x needed or not. sta d_eof,y iny cpy #$03 move all 3 bytes beq L4780 - lda FCBs+FCB.1stBLK,x also move in the address of the file's + lda XDOS.FCBs+FCB.1stBLK,x also move in the address of the file's sta d_filid,y first block since it might have changed inx since the file first opened. bne L476C branch always. L4780 ldx fcbptr - lda FCBs+FCB.STYPE,x the last thing to update is storage + lda XDOS.FCBs+FCB.STYPE,x the last thing to update is storage asl type (y=fcbptr+2). shift into high asl nibble. asl @@ -202,7 +202,7 @@ L4780 ldx fcbptr bcs glberr error. ldx fcbptr mark - stz FCBs+FCB.DIRTY,x fcb/directory as undirty. + stz XDOS.FCBs+FCB.DIRTY,x fcb/directory as undirty. lda d_dev see if bitmap should be written. cmp bmadev is it in same as current file ? @@ -218,7 +218,7 @@ L47B2 clc *-------------------------------------- glberr ldy #$01 pha - lda (A3L),y + lda (ZP.A3L),y bne L47C1 not an 'all' so report now clc @@ -232,8 +232,8 @@ L47C1 pla *-------------------------------------- XDOS.FCBDevIDSelect ldx fcbptr - lda FCBs+FCB.DEVID,x - sta DEVNUM + lda XDOS.FCBs+FCB.DEVID,x + sta GP.DEVNUM rts *-------------------------------------- XDOS.SetFCBSType @@ -242,25 +242,25 @@ XDOS.SetFCBSType lsr lsr ldy fcbptr and save it in fcb. - sta FCBs+FCB.STYPE,y + sta XDOS.FCBs+FCB.STYPE,y rts *-------------------------------------- XDOS.ClrFCBStatus ldy fcbptr clear allocation states for data block - lda FCBs+FCB.F,y and both levels of indexes/ + lda XDOS.FCBs+FCB.F,y and both levels of indexes/ and #$F8 - sta FCBs+FCB.F,y indicates that either they exist now + sta XDOS.FCBs+FCB.F,y indicates that either they exist now rts or unnecessary for current position. *-------------------------------------- XDOS.GetFCBStatus ldx fcbptr index to fcb. - lda FCBs+FCB.F,x return status byte. + lda XDOS.FCBs+FCB.F,x return status byte. rts *-------------------------------------- XDOS.SetFCBStatus ldx fcbptr - ora FCBs+FCB.F,x - sta FCBs+FCB.F,x + ora XDOS.FCBs+FCB.F,x + sta XDOS.FCBs+FCB.F,x rts *-------------------------------------- L47CA lda #MLI.E.LOCKED access error @@ -276,7 +276,7 @@ XDOS.SetEOF jsr gfcbstyp can only move end of tree, sapling or seed. asl asl sta stortyp may be used later. - lda FCBs+FCB.ACCESS,y + lda XDOS.FCBs+FCB.ACCESS,y and #$02 is write enabled to set new eof ? beq L47CA no, access error. @@ -288,7 +288,7 @@ XDOS.SetEOF jsr gfcbstyp can only move end of tree, sapling or seed. iny upon contraction. ldx #$02 all 3 bytes of the eof -L47EF lda FCBs+FCB.EOF,y +L47EF lda XDOS.FCBs+FCB.EOF,y sta oldeof,x dey dex @@ -297,7 +297,7 @@ L47EF lda FCBs+FCB.EOF,y ldy #$04 ldx #$02 -L47FD lda (A3L),y position mark to new eof +L47FD lda (ZP.A3L),y position mark to new eof sta tposll,x dey dex @@ -318,8 +318,8 @@ eofset ldy #$04 inx inx -L481C lda (A3L),y - sta FCBs+FCB.EOF,x +L481C lda (ZP.A3L),y + sta XDOS.FCBs+FCB.EOF,x dex dey cpy #$02 all 3 bytes moved ? @@ -341,7 +341,7 @@ purge jsr flush1 make sure file is current iny ldx #$02 -L4840 lda FCBs+FCB.MARK,y +L4840 lda XDOS.FCBs+FCB.MARK,y cmp tposll,x compare until not equal or carry clear. bcc L485F branch if eof > mark. @@ -355,7 +355,7 @@ L484E ldy fcbptr ldx #$00 L4853 lda tposll,x fake position, correct position will - sta FCBs+FCB.MARK,y be made below... + sta XDOS.FCBs+FCB.MARK,y be made below... iny inx cpx #$03 move all 3 bytes @@ -393,9 +393,9 @@ L485F jsr tkfrecnt force free block count before releasing L489F sta dseed+1 L48A2 ldy fcbptr also must pass file's 1st block address. - lda FCBs+FCB.1stBLK,y + lda XDOS.FCBs+FCB.1stBLK,y sta firstbl - lda FCBs+FCB.1stBLK+1,y + lda XDOS.FCBs+FCB.1stBLK+1,y sta firstbh stz deblock lastly, initialize # of blocks to stz deblock+1 be free'd. @@ -408,10 +408,10 @@ L48A2 ldy fcbptr also must pass file's 1st block address. ldx #$00 L48C2 lda firstbl,x - sta FCBs+FCB.1stBLK,y move in possible new first file block - lda FCBs+FCB.UBLK,y address. adjust usage count also + sta XDOS.FCBs+FCB.1stBLK,y move in possible new first file block + lda XDOS.FCBs+FCB.UBLK,y address. adjust usage count also sbc deblock,x - sta FCBs+FCB.UBLK,y + sta XDOS.FCBs+FCB.UBLK,y iny inx txa @@ -429,10 +429,10 @@ L48C2 lda firstbl,x ldx #$02 -L48F2 lda FCBs+FCB.MARK,y tell 'rdposn' to go to correct +L48F2 lda XDOS.FCBs+FCB.MARK,y tell 'rdposn' to go to correct sta tposll,x eor #$80 position from incorrect place. - sta FCBs+FCB.MARK,y + sta XDOS.FCBs+FCB.MARK,y dey dex bpl L48F2 @@ -470,8 +470,8 @@ XDOS.GetEOF ldx fcbptr index to end of file mark ldy #$02 and index to user's call parameters -L4924 lda FCBs+FCB.EOF,x - sta (A3L),y +L4924 lda XDOS.FCBs+FCB.EOF,x + sta (ZP.A3L),y inx iny cpy #$05 @@ -482,13 +482,13 @@ L4924 lda FCBs+FCB.EOF,x *-------------------------------------- XDOS.NewLine ldy #$02 adjust newline status for open file. - lda (A3L),y on or off ? + lda (ZP.A3L),y on or off ? ldx fcbptr it will be 0 if off. - sta FCBs+FCB.NLMASK,x set new line mask + sta XDOS.FCBs+FCB.NLMASK,x set new line mask iny - lda (A3L),y and move in 'new-line' byte - sta FCBs+FCB.NLBYTE,x + lda (ZP.A3L),y and move in 'new-line' byte + sta XDOS.FCBs+FCB.NLBYTE,x clc no error possible rts @@ -513,7 +513,7 @@ XDOS.GetFileInfo and #$7F strip bit used by setinfo tax lda d_stor,x move directory info to call spec. table - sta (A3L),y + sta (ZP.A3L),y dey cpy #$03 bcs .2 if all info bytes moved, retn carry clr @@ -526,7 +526,7 @@ XDOS.SetFileInfo jsr XDOS.FindFile get the file to work on. bcs L49CF if error. - lda bubit see if backup bit can be cleared + lda GP.BUBIT see if backup bit can be cleared eor #$20 and d_attr and #$20 @@ -537,7 +537,7 @@ XDOS.SetFileInfo L49B9 ldx inftabl-3,y get index to corresponding 'd.' table. bmi L49C3 branch if parameter can't be set. - lda (A3L),y + lda (ZP.A3L),y sta d_stor,x L49C3 dey has user's request been satisfied ? @@ -552,7 +552,7 @@ L49C3 dey has user's request been satisfied ? L49CF rts L49D0 ldy #$0B - lda (A3L),y was clock null input ? + lda (ZP.A3L),y was clock null input ? bne XDOS.SetFileInfoEx.8 jmp drevise update with clock also... @@ -564,7 +564,7 @@ XDOS.SetFileInfoEx ldx #S.FIEX.BLKPTR+2-1 ldy #S.FIEX.BLKPTR+2-1+3 -.2 lda (A3L),y +.2 lda (ZP.A3L),y sta d_stor,x dey dex @@ -583,7 +583,7 @@ XDOS.GetFileInfoEx ldy #S.FIEX.BLKPTR+2-1+3 .2 lda d_stor,x - sta (A3L),y + sta (ZP.A3L),y dey dex bpl .2 @@ -592,7 +592,7 @@ XDOS.GetFileInfoEx ldy #S.FIEX.ACL+7+3 .3 lda h_acl,x - sta (A3L),y + sta (ZP.A3L),y dey dex bpl .3 @@ -613,19 +613,19 @@ XDOS.GetFileInfoVol stz reql force a count of free blocks. stz reqh - ldx vcbptr + ldx XDOS.VCBPtr jsr tkfrecnt get a fresh count of free blocks on - ldx vcbptr this volume. - lda VCBs+VCB.FBLK+1,x return total blocks and total in use. + ldx XDOS.VCBPtr this volume. + lda XDOS.VCBs+VCB.FBLK+1,x return total blocks and total in use. sta reqh 1st transfer 'free' blocks to zpage - lda VCBs+VCB.FBLK,x for later subtraction to determine + lda XDOS.VCBs+VCB.FBLK,x for later subtraction to determine sta reql the 'used' count. - lda VCBs+VCB.TBLK+1,x transfer to 'd.' table as aux id + lda XDOS.VCBs+VCB.TBLK+1,x transfer to 'd.' table as aux id sta d_auxid+1 (total block count is considered aux id pha for the volume) - lda VCBs+VCB.TBLK,x + lda XDOS.VCBs+VCB.TBLK,x sta d_auxid sec subtract and report the number of sbc reql blocks 'in use' @@ -647,13 +647,13 @@ XDOS.ACL jsr XDOS.FindDirOrVol ldx #7 ldy #S.FIEX.ACL+3 - lda (A3L),y + lda (ZP.A3L),y beq .2 ldy #S.FIEX.ACL+7+3 -.1 lda (A3L),y - sta gbuf+$14,x +.1 lda (ZP.A3L),y + sta XDOS.GBuf+$14,x dey dex bpl .1 @@ -666,8 +666,8 @@ XDOS.ACL jsr XDOS.FindDirOrVol .2 ldy #S.FIEX.ACL+7+3 -.3 lda gbuf+$14,x - sta (A3L),y +.3 lda XDOS.GBuf+$14,x + sta (ZP.A3L),y dey dex bpl .3 @@ -684,13 +684,13 @@ XDOS.Rename jsr XDOS.CheckPath look for source (original) file. XDOS.RenameVol jsr XDOS.GetRenPath syntax new name. bcs L49FD rename error. - ldy pathbuf find out if only rootname for new name + ldy XDOS.PathBuf find out if only rootname for new name iny - lda pathbuf,y must be $FF if volume name only. + lda XDOS.PathBuf,y must be $FF if volume name only. bne L4A72 if not single name - ldx vcbptr check for open files before changing. - lda VCBs+VCB.OFCNT,x + ldx XDOS.VCBPtr check for open files before changing. + lda XDOS.VCBs+VCB.OFCNT,x beq L49FF if volume not busy. lda #MLI.E.OPEN file busy error. @@ -698,18 +698,18 @@ L49FD sec rts L49FF ldy #0 get newname's length - lda pathbuf,y + lda XDOS.PathBuf,y ora #$F0 (root file storage type) jsr XDOS.UpdateHdr update root directory. bcs .9 rename error. ldy #$00 - ldx vcbptr update vcb also. + ldx XDOS.VCBPtr update vcb also. -.1 lda pathbuf,y move new name to vcb. +.1 lda XDOS.PathBuf,y move new name to vcb. beq .8 - sta VCBs,x + sta XDOS.VCBs,x iny next character inx bra .1 @@ -720,8 +720,8 @@ L49FF ldy #0 get newname's length XDOS.RenameFileDir jsr getnamptr set y = 1st char of path, x = 0. -L4A21 lda pathbuf,y move original name to gbuf - sta gbuf,x for later comparison to new name. +L4A21 lda XDOS.PathBuf,y move original name to XDOS.GBuf + sta XDOS.GBuf,x for later comparison to new name. bmi L4A2D if last character has been moved iny otherwise, get the next one. @@ -733,9 +733,9 @@ L4A2D jsr XDOS.GetRenPath get new name syntaxed. jsr getnamptr set y = path, x = 0. - lda pathbuf,y now compare new name with old name + lda XDOS.PathBuf,y now compare new name with old name -L4A38 cmp gbuf,x to make sure they are in the same dir. +L4A38 cmp XDOS.GBuf,x to make sure they are in the same dir. php save result of comparison. and #$F0 was last char really a count ? bne L4A46 if not. @@ -748,26 +748,26 @@ L4A46 plp result of last comparison ? inx bump pointers. iny - lda pathbuf,y was it the last character ? + lda XDOS.PathBuf,y was it the last character ? bne L4A38 if not. clc no operation, names were the same. rts L4A52 ldy rnptr index to last name in the chain. - lda pathbuf,y get last name length. + lda XDOS.PathBuf,y get last name length. sec adc rnptr tay - lda pathbuf,y this byte should be $00 ! + lda XDOS.PathBuf,y this byte should be $00 ! bne L4A72 if not, bad path error. ldx namptr index to last of original name - lda gbuf,x + lda XDOS.GBuf,x sec adc namptr tax - lda gbuf,x this byte should also be $00. + lda XDOS.GBuf,x this byte should also be $00. beq L4A76 if so, continue processing. L4A72 lda #MLI.E.INVPATH bad pathname error. @@ -814,12 +814,12 @@ L4AAE jsr XDOS.GetRenPath since both names go into the directory, bcs L4A74 syntax the new name to get the local ldy rnptr name address. y = index to local name - ldx pathbuf,y length. adj y to last char of new name. + ldx XDOS.PathBuf,y length. adj y to last char of new name. tya - adc pathbuf,y + adc XDOS.PathBuf,y tay -L4ABE lda pathbuf,y move local name to dir entry workspace. +L4ABE lda XDOS.PathBuf,y move local name to dir entry workspace. sta d_stor,x dey dex @@ -828,7 +828,7 @@ L4ABE lda pathbuf,y move local name to dir entry workspace. lda d_stor preserve file storage type. and #$F0 strip off old name length. tax - ora pathbuf,y add in new name's length. + ora XDOS.PathBuf,y add in new name's length. sta d_stor cpx #$D0 that file must be changed also. bne L4AF0 branch if not directory type. @@ -837,7 +837,7 @@ L4ABE lda pathbuf,y move local name to dir entry workspace. bcs L4A74 errors. ldy rnptr change the header's name to match the - lda pathbuf,y owner's new name. get local name length. + lda XDOS.PathBuf,y owner's new name. get local name length. ora #$E0 assume it's a header. jsr XDOS.UpdateHdr bcs L4A74 @@ -865,9 +865,9 @@ L4B39 lda d_attr make sure ok to destroy file. bmi L4B45 lda #MLI.E.LOCKED access error - jsr GP.P8errv + jsr GP.SYSERR -L4B45 lda DEVNUM last device used. +L4B45 lda GP.DEVNUM last device used. jsr twrprot1 test for write protected hardware bcs L4B66 before going thru deallocation. @@ -928,15 +928,15 @@ L4BA1 dec h_fcnt mark header with one less file. L4BAF cmp #$01 adjust carry accordingly rts -dvcbrev ldx vcbptr update block free count in vcb. point to vcb of correct device. +dvcbrev ldx XDOS.VCBPtr update block free count in vcb. point to vcb of correct device. lda deblock get # of blocks recently freed. - adc VCBs+VCB.FBLK,x - sta VCBs+VCB.FBLK,x update current free block count. + adc XDOS.VCBs+VCB.FBLK,x + sta XDOS.VCBs+VCB.FBLK,x update current free block count. lda deblock+1 - adc VCBs+VCB.FBLK+1,x - sta VCBs+VCB.FBLK+1,x + adc XDOS.VCBs+VCB.FBLK+1,x + sta XDOS.VCBs+VCB.FBLK+1,x - stz VCBs+VCB.BMAPIDX,x force re-scan from 1st bitmap + stz XDOS.VCBs+VCB.BMAPIDX,x force re-scan from 1st bitmap * lda #0 ????? @@ -950,14 +950,14 @@ L4BCF cmp #$D0 is this a directory file ? jsr fndbmap make sure a buffer available for bitmap bcs L4C1A if error. - jsr XDOS.ReadGBuf_d_frst read 1st block of directory into gbuf + jsr XDOS.ReadGBuf_d_frst read 1st block of directory into XDOS.GBuf bcs L4C1A - lda gbuf+37 do any files exist in this directory ? - ora gbuf+38 + lda XDOS.GBuf+37 do any files exist in this directory ? + ora XDOS.GBuf+38 bne L4C1Abis if so, access error. -L4BF6 sta gbuf+4 make it an invalid subdirectory +L4BF6 sta XDOS.GBuf+4 make it an invalid subdirectory .DO LOWERCASE=1 jsr XDOS.WriteGBufDir .ELSE @@ -965,17 +965,17 @@ L4BF6 sta gbuf+4 make it an invalid subdirectory .FIN bcs L4C1A -L4BFE lda gbuf+2 get forward link. +L4BFE lda XDOS.GBuf+2 get forward link. cmp #$01 test for null block into carry. - ldx gbuf+3 get the rest of the block address. + ldx XDOS.GBuf+3 get the rest of the block address. bne L4C0A branch if not null. bcc L4BCD was the low part null as well ? L4C0A jsr XDOS.DeallocAX free this block. bcs L4C1A - lda gbuf+2 - ldx gbuf+3 + lda XDOS.GBuf+2 + ldx XDOS.GBuf+3 jsr XDOS.ReadGBufAX read next DIR block (no need to unpack) bcc L4BFE loop until all freed @@ -984,7 +984,7 @@ L4C1A rts L4C1Abis lda #MLI.E.LOCKED access error. .HS 2C BIT ABS L4C1B lda #MLI.E.INCFF file incompatible - jsr GP.P8errv + jsr GP.SYSERR fcbused pha mark fcb as dirty so the directory will be flushed on 'flush'. phy save regs. @@ -992,7 +992,7 @@ fcbused pha mark fcb as dirty so the directory will be flushed on 'flush ldy fcbptr lda #$80 mark fcb as dirty. - sta FCBs+FCB.DIRTY,y save it back + sta XDOS.FCBs+FCB.DIRTY,y save it back ply and restore regs. pla @@ -1000,10 +1000,10 @@ fcbused pha mark fcb as dirty so the directory will be flushed on 'flush *-------------------------------------- XDOS.UpdateHdr ldx #$00 -.1 sta gbuf+4,x +.1 sta XDOS.GBuf+4,x inx iny - lda pathbuf,y + lda XDOS.PathBuf,y bne .1 .DO LOWERCASE=1 @@ -1016,8 +1016,10 @@ getnamptr ldy #$00 return pointer to 1st name of path. bit prfxflg is this a prefixed name ? bmi .1 branch if not. - ldy newpfxptr + ldy GP.NEWPFXPTR + .1 ldx #$00 + rts *-------------------------------------- MAN diff --git a/ProDOS.FX/ProDOS.S.XDOS.F.txt b/ProDOS.FX/ProDOS.S.XDOS.F.txt index d4c42800..79d9bf4d 100644 --- a/ProDOS.FX/ProDOS.S.XDOS.F.txt +++ b/ProDOS.FX/ProDOS.S.XDOS.F.txt @@ -2,7 +2,7 @@ NEW AUTO 3,1 *-------------------------------------- * 'detree' deallocates blocks from tree files. it is assumed that the device has -* been pre-selected and the 'gbuf' may be used. +* been pre-selected and the 'XDOS.GBuf' may be used. * * on entry: * stortype = storage type in upper nibble, lower nibble is undisturbed. @@ -32,7 +32,7 @@ detree lda stortyp which kind of tree ? bcc L4C59 branch if it is. lda #$0C block allocation error. - jsr GP.SysDeath P8 system death vector + jsr GP.SYSDEATH P8 system death vector * seedling file type - make sure first desirable block is the only * block available in a seedling file. @@ -54,7 +54,7 @@ L4C51 lda dtree can't have any blocks in this range L4C59 lda #$80 sta topdest for tree top start at end, work backwards. -L4C5E jsr drdfrst read specified first block into gbuf. +L4C5E jsr drdfrst read specified first block into XDOS.GBuf. bcs L4CC2 return errors. ldy topdest get current pointer to top indexes. @@ -63,12 +63,12 @@ L4C5E jsr drdfrst read specified first block into gbuf. ldx #$07 buffer up to 8 sapling index block -L4C6D lda gbuf,y addresses. fetch low block address +L4C6D lda XDOS.GBuf,y addresses. fetch low block address sta dealbufl,x and save it. - ora gbuf+$100,y is it a real block that is allocated? + ora XDOS.GBuf+$100,y is it a real block that is allocated? beq L4C81 branch if phantom block. - lda gbuf+$100,y fetch high block address + lda XDOS.GBuf+$100,y fetch high block address sta dealbufh,x and save it. dex decrement and test for dealc buf filled. bmi L4C93 branch if 8 addresses fetched. @@ -91,13 +91,13 @@ L4C93 dey decrement to prepare for next time. L4C99 stx dtmpx save index to dealc buf. lda dealbufl,x - sta bloknml + sta ZP.BLKNUM ora dealbufh,x finished ? beq L4C5E branch if done with this level. lda dealbufh,x complete address with high byte, - sta bloknml+1 - jsr XDOS.ReadGBuf read sapling level into gbuf. + sta ZP.BLKNUM+1 + jsr XDOS.ReadGBuf read sapling level into XDOS.GBuf. bcs L4CC2 return errors. jsr dealblk go free all data indexes in this block @@ -116,7 +116,7 @@ L4CC2 rts sapling block numbers. L4CC3 ldy dtree deallocate all sapling blocks greater iny than specified block. - jsr dalblk1 (master index in gbuf) + jsr dalblk1 (master index in XDOS.GBuf) bcs L4CC2 if errors. jsr XDOS.WriteGBuf write updated master index back to disk. @@ -125,14 +125,14 @@ L4CC3 ldy dtree deallocate all sapling blocks greater ldy dtree figure out if tree can become sapling. beq L4CEB branch if it can. - lda gbuf,y otherwise, continue with partial, deallocation of last sapling index. - ora gbuf+$100,y is there such a sapling index block ? + lda XDOS.GBuf,y otherwise, continue with partial, deallocation of last sapling index. + ora XDOS.GBuf+$100,y is there such a sapling index block ? beq L4CC2 all done if not. - lda gbuf,y - ldx gbuf+$100,y read in sapling level to be modified. + lda XDOS.GBuf,y + ldx XDOS.GBuf+$100,y read in sapling level to be modified. - jsr XDOS.ReadGBufAX read highest sapling index into gbuf. + jsr XDOS.ReadGBufAX read highest sapling index into XDOS.GBuf. bcc L4CF5 rts @@ -141,7 +141,7 @@ L4CEB jsr shrink shrink tree to sapling bcs L4CC2 sapdel0 jsr drdfrst read specified sapling level index - bcs L4CC2 into gbuf. branch if error. + bcs L4CC2 into XDOS.GBuf. branch if error. L4CF5 ldy dsap pointer to last of desirable indexes. iny inc to 1st undesirable. @@ -156,14 +156,14 @@ L4CF5 ldy dsap pointer to last of desirable indexes. L4D05 ldy dsap prepare to clean up last data block. beq L4D1F branch if possibility of making a seed. -L4D0A lda gbuf,y fetch low order data block address. - ora gbuf+$100,y is it a real block ? +L4D0A lda XDOS.GBuf,y fetch low order data block address. + ora XDOS.GBuf+$100,y is it a real block ? beq L4CC2 if not, then done. - lda gbuf,y - ldx gbuf+$100,y + lda XDOS.GBuf,y + ldx XDOS.GBuf+$100,y - jsr XDOS.ReadGBufAX go read data block into gbuf. + jsr XDOS.ReadGBufAX go read data block into XDOS.GBuf. bcc L4D2E branch if good read L4D1E rts or return error. @@ -187,7 +187,7 @@ L4D2E ldy dseed+1 check high byte for no deletion. L4D39 lda #$00 -L4D3B sta gbuf+$100,y zero out unwanted data +L4D3B sta XDOS.GBuf+$100,y zero out unwanted data iny bne L4D3B @@ -196,7 +196,7 @@ L4D3B sta gbuf+$100,y zero out unwanted data ldy dseed -L4D49 sta gbuf,y +L4D49 sta XDOS.GBuf,y iny bne L4D49 @@ -204,27 +204,27 @@ L4D4F jmp XDOS.WriteGBuf update data block to disk. L4D52 rts return error status. -drdfrst lda firstbl read specified 1st block into gbuf +drdfrst lda firstbl read specified 1st block into XDOS.GBuf ldx firstbh jmp XDOS.ReadGBufAX go read it - +*-------------------------------------- * beware that dealloc may bring in a new bitmap block and may destroy * locations 46 and 47 which are used to point to the current index block. - +*-------------------------------------- shrink ldx firstbh first deallocate top index block phx lda firstbl pha save block address of this index block. jsr XDOS.DeallocAX free it from the bitmap pla - sta bloknml set master of sapling + sta ZP.BLKNUM set master of sapling pla index block address. - sta bloknml+1 + sta ZP.BLKNUM+1 bcs L4D1E report errors. - lda gbuf get # of new 1st block from old index. + lda XDOS.GBuf get # of new 1st block from old index. sta firstbl - lda gbuf+$100 + lda XDOS.GBuf+$100 sta firstbh ldy #$00 jsr swapme flip that one entry in old top index. @@ -235,15 +235,15 @@ shrink ldx firstbh first deallocate top index block jmp XDOS.WriteGBuf write the (deallocated) old top index. dealblk ldy #$00 start at beginning. -dalblk1 lda bloknml save disk address of gbuf's data. +dalblk1 lda ZP.BLKNUM save disk address of XDOS.GBuf's data. pha - lda bloknml+1 + lda ZP.BLKNUM+1 pha L4D96 sty saptr save current index. - lda gbuf,y get low address of block to deallocate. + lda XDOS.GBuf,y get low address of block to deallocate. cmp #$01 test for null block into carry. - ldx gbuf+$100,y get remainder of block address. + ldx XDOS.GBuf+$100,y get remainder of block address. bne L4DA5 branch if not null. bcc L4DB0 was the low part null too ? @@ -262,9 +262,9 @@ L4DB0 iny next block address. L4DB4 tax save error code, if any. pla restore blocknm (16 bit) - sta bloknml+1 + sta ZP.BLKNUM+1 pla - sta bloknml + sta ZP.BLKNUM txa restore return code rts @@ -274,11 +274,11 @@ swapme lda delflag swapping or zeroing ? tax make x = 0. beq L4DCB zero the index (always taken). -L4DC5 ldx gbuf+$100,y index high - lda gbuf,y index low -L4DCB sta gbuf+$100,y save index high +L4DC5 ldx XDOS.GBuf+$100,y index high + lda XDOS.GBuf,y index low +L4DCB sta XDOS.GBuf+$100,y save index high txa - sta gbuf,y save index low + sta XDOS.GBuf,y save index low rts done. *-------------------------------------- * MEMMGR memory manager @@ -286,7 +286,8 @@ L4DCB sta gbuf+$100,y save index high * allocate buffer in memory tables *-------------------------------------- alcbuffr ldy #$04 index to user specified buffer. -alcbufr1 lda (A3L),y this buffer must be on a page boundary. + +alcbufr1 lda (ZP.A3L),y this buffer must be on a page boundary. tax save for validation. cmp #$08 bcc L4E1E cannot be lower than video ! @@ -296,7 +297,7 @@ alcbufr1 lda (A3L),y this buffer must be on a page boundary. sta datptr+1 dey - lda (A3L),y low address should be zero ! + lda (ZP.A3L),y low address should be zero ! sta datptr bne L4E1E error if not page boundary. @@ -306,8 +307,8 @@ alcbufr1 lda (A3L),y this buffer must be on a page boundary. inx L4DED dex test for conflicts. - jsr cmembit test for free buffer space - and MEMTABL,y P8 memory bitmap + jsr XDOS.X2MemTablYA test for free buffer space + and GP.MEMTABL,y bne L4E1E report memory conflict, if any. cpx datptr+1 test all 4 pages. @@ -319,19 +320,17 @@ L4DED dex test for conflicts. inx L4DFE dex set proper bits to 1 - jsr cmembit - ora MEMTABL,y to mark it's allocation. - sta MEMTABL,y + jsr XDOS.MemTablEOR cpx datptr+1 set all 4 pages bne L4DFE ldy fcbptr calculate buffer number - lda FCBs,y + lda XDOS.FCBs,y asl buffer number = (entnum) * 2. - sta FCBs+FCB.BUFID,y save it in fcb. + sta XDOS.FCBs+FCB.BUFID,y save it in fcb. tax use entnum * 2 as index to global lda datptr+1 buffer addr tables. get addr already - sta buftbl-1,x validated as good. store hi addr + sta GB.BUFTABL-1,x validated as good. store hi addr clc (entnums start at 1, not 0) rts @@ -341,14 +340,14 @@ L4E1E lda #MLI.E.BADBUF buffer is in use or not legal rts *-------------------------------------- relbuffr tax index into global buffer table. - lda buftbl-2,x + lda GB.BUFTABL-2,x sta bufaddrl - lda buftbl-1,x + lda GB.BUFTABL-1,x sta bufaddrh beq relbuffr.8 branch if unallocated buffer space. - stz buftbl-1,x take address out of buffer list. - stz buftbl-2,x (x was set up by getbufadr) + stz GB.BUFTABL-1,x take address out of buffer list. + stz GB.BUFTABL-2,x (x was set up by getbufadr) freebuf ldx bufaddrh get hi buffer address inx add 4 pages to account for 1k space. @@ -357,33 +356,13 @@ freebuf ldx bufaddrh get hi buffer address inx .1 dex drop to next lower page. - jsr cmembit get bit and position to memtable of - eor #$FF this page. invert mask. - and MEMTABL,y mark address as free space. - sta MEMTABL,y + jsr XDOS.MemTablEOR cpx bufaddrh all pages freed ? bne .1 no. relbuffr.8 clc no error. rts *-------------------------------------- -* calculate memory allocation bit position. -* on entry: x = high address of buffer, low address assumed zero. -* on exit: acc = allocation bit mask, x = unchanged, y = pointer to memtabl byte -*-------------------------------------- -cmembit txa page address - and #$07 which page in any 2k set ? - tay use as index to determine - lda whichbit,y bit position representation. - pha save bit position mask for now. - txa page address. - lsr - lsr determine 2k set - lsr - tay return it in y. - pla restore bit mask. return bit position - rts in a & y, pointer to memtabl in x. -*-------------------------------------- valdbuf lda usrbuf+1 high address of user's buffer cmp #$02 must be greater than page 2. bcc L4E1E report bad buffer @@ -406,8 +385,8 @@ L4E76 clc inx loop thru all affected pages. vldbuf1 dex check next lower page. - jsr cmembit - and MEMTABL,y if 0 then no conflict. + jsr XDOS.X2MemTabLYA + and GP.MEMTABL,y if 0 then no conflict. bne L4E1E branch if conflict. cpx usrbuf+1 was that the last (lowest) page ? @@ -416,12 +395,35 @@ vldbuf1 dex check next lower page. clc all pages ok. rts *-------------------------------------- +* calculate memory allocation bit position. +* on entry: x = high address of buffer, low address assumed zero. +* on exit: acc = allocation bit mask, x = unchanged, y = pointer to memtabl byte +*-------------------------------------- +XDOS.MemTablEOR jsr XDOS.X2MemTablYA + eor GP.MEMTABL,y + sta GP.MEMTABL,y + rts +*-------------------------------------- +XDOS.X2MemTablYA + txa page address + and #$07 which page in any 2k set ? + tay use as index to determine + lda whichbit,y bit position representation. + pha save bit position mask for now. + txa page address. + lsr + lsr determine 2k set + lsr + tay return it in y. + pla restore bit mask. return bit position + rts in a & y, pointer to memtabl in x. +*-------------------------------------- XDOS.GetBuf ldy #$02 give user address of file buffer referenced by refnum. lda bufaddrl - sta (A3L),y + sta (ZP.A3L),y iny lda bufaddrh - sta (A3L),y + sta (ZP.A3L),y clc no errors possible rts *-------------------------------------- @@ -482,53 +484,53 @@ XDOS.IsValidFirstChar.SEC * move 3 pages of dispatcher from 'displc2' to 'dispadr' * this move routine must be resident above $E000 at all times *-------------------------------------- -calldisp lda RRAMWRAMBNK2 read/write RAM bank 2 - lda RRAMWRAMBNK2 +XDOS.CallDisp lda IO.RRAMWRAMBNK2 read/write RAM bank 2 + lda IO.RRAMWRAMBNK2 - stz A1L + stz ZP.A1L lda #$D1 - sta A1L+1 + sta ZP.A1L+1 - stz A2L + stz ZP.A2L lda #$10 - sta A2L+1 + sta ZP.A2L+1 ldy #$00 ldx #$03 3 pages to move. -.1 lda (A1L),y - sta (A2L),y +.1 lda (ZP.A1L),y + sta (ZP.A2L),y iny bne .1 - inc A1L+1 pointers to next page - inc A2L+1 + inc ZP.A1L+1 pointers to next page + inc ZP.A2L+1 dex move all pages needed bne .1 - lda RRAMWRAMBNK1 read/write RAM bank 1 - lda RRAMWRAMBNK1 swap mli space back in + lda IO.RRAMWRAMBNK1 read/write RAM bank 1 + lda IO.RRAMWRAMBNK1 swap mli space back in - stz mliact MLI active flag + stz GP.MLIACTV MLI active flag - stz softev + stz ROM.SOFTEV lda #$10 point RESET to dispatch entry - sta softev+1 + sta ROM.SOFTEV+1 eor #$A5 - sta pwredup power up byte + sta ROM.PWREDUP power up byte jmp $1000 *-------------------------------------- XDOS.SPREMAP ldx #$03 assume 3 parameters. - lda A4L command number - sta cmdnum + lda ZP.CMDNUM + sta .5 bne .1 taken if not status call ldy #XDOS.SPStatus set up memory for the status list buffer - sty buf fake up the prodos parameters + sty ZP.BUFPTR fake up the prodos parameters ldy /XDOS.SPStatus - sty buf+1 - stz bloknml set statcode = 0 for simple status call + sty ZP.BUFPTR+1 + stz ZP.BLKNUM set statcode = 0 for simple status call .1 cmp #$03 format command ? bne .2 no. @@ -537,7 +539,7 @@ XDOS.SPREMAP ldx #$03 assume 3 parameters. .2 stx XDOS.SPParams set # of parms. - lda unitnum DSSS0000 + lda ZP.UNITNUM DSSS0000 lsr turn unit number into an index lsr lsr @@ -547,23 +549,23 @@ XDOS.SPREMAP ldx #$03 assume 3 parameters. lda XDOS.SPUnit-1,x get the smartport unit number and sta XDOS.SPParams.U store into smartport parm list. lda XDOS.SPVectLo-1,x - sta sp_vector+1 copy smartport entry address + sta .4+1 copy smartport entry address lda XDOS.SPVectHi-1,x - sta sp_vector+2 + sta .4+2 ldx #$04 copy buffer pointer and block # -.3 lda buf-1,x from prodos parameters - sta XDOS.SPParams.B-1,x to smartport parameter block +.3 lda ZP.BUFPTR-1,x from prodos parameters + sta XDOS.SPParams.B-1,x to smartport parameter block dex bne .3 -sp_vector jsr $0000 smartport call (entry address gets modified) -cmdnum .HS 00 command # +.4 jsr $0000 smartport call (entry address gets modified) +.5 .HS 00 command # .DA XDOS.SPParams bcs .9 - ldx cmdnum status call ? + ldx .5 status call ? bne .9 no... ldx XDOS.SPStatus+1 else get the block count @@ -588,22 +590,26 @@ XDOS.SPParams.U .HS 00 unit number XDOS.SPParams.B .HS 0000 data buffer .HS 000000 block number (3 bytes) *-------------------------------------- -XDOS.TBX jmp (.1,x) +XDOS.TBX bit IO.RRAMWRAMBNK1 Get RW access to LC + jsr .1 + jmp IRQ.ToRomRTS -.1 .DA XDOS.TBX.MemReset +.1 jmp (.2,x) + +.2 .DA XDOS.TBX.MemReset .DA XDOS.TBX.EnumBlk .DA XDOS.TBX.EnumNext *-------------------------------------- XDOS.TBX.MemReset ldx #$17 -.1 stz MEMTABL,x P8 memory bitmap +.1 stz GP.MEMTABL,x P8 memory bitmap dex bne .1 - inc MEMTABL+$17 protect global page + inc GP.MEMTABL+$17 protect global page lda #$CF protect zero page, stack and page 1 - sta MEMTABL + sta GP.MEMTABL rts *-------------------------------------- XDOS.TBX.EnumBlk @@ -689,7 +695,7 @@ XDOS.TBX.SECRTS sec rts *-------------------------------------- XDOS.ZPT.InitGBuf - lda /gbuf + lda /XDOS.GBuf XDOS.ZPT.InitA sta zpt+1 lda #4 @@ -865,8 +871,8 @@ d_dhdr .HS 0000 file directory header block address scrtch .HS 00000000 scratch area for allocation address conversion. oldeof .HS 000000 temp used in r/w oldmark .HS 000000 -xvcbptr .HS 00 used in 'cmpvcb' as a temp -vcbptr .HS 00 +*xvcbptr .HS 00 used in 'cmpvcb' as a temp +*XDOS.VCBPtr .HS 00 fcbptr .HS 00 fcbflg .HS 00 reql .HS 00 @@ -877,13 +883,13 @@ entcntl .HS 00 entcnth .HS 00 cntent .HS 00 nofree .HS 00 -bmcnt .HS 00 +*bmcnt .HS 00 saptr .HS 00 pathcnt .HS 00 p_dev .HS 00 p_blok .HS 0000 -bmptr .HS 00 -basval .HS 00 +*bmptr .HS 00 +*basval .HS 00 half .HS 00 * bitmap info tables @@ -902,15 +908,13 @@ nlmask .HS 00 ioaccess .HS 00 has a call been made to disk device handler ? cmdtemp .HS 00 bkbitflg .HS 00 used to set or clear backup bit -duplflag .HS 00 -vcbentry .HS 00 * xdos temporary variables namcnt .HS 00 rnptr .HS 00 namptr .HS 00 -vnptr .HS 00 +*vnptr .HS 00 prfxflg .HS 00 cferr .HS 00 @@ -962,10 +966,13 @@ XDOS.DATA.LEN .EQ *-XDOS.DATA .LIST ON XDOS.FREE .EQ $FEFD-*-XDOS.DATA.LEN (2.0.3 = $0C) .LIST OFF -cortdisp .EQ $FEFD -cortflag .EQ $FEFF cortland flag. 1 = Cortland system (must stay within page boundary) +XDOS.CortDisp .EQ $FEFD +XDOS.CortFlag .EQ $FEFF cortland flag. 1 = Cortland system (must stay within page boundary) +*-------------------------------------- + .EP +*-------------------------------------- +XDOS.LEN .EQ *-XDOS.START *-------------------------------------- -XDOS.LEN .EQ *-XDOS MAN SAVE usr/src/prodos.fx/prodos.s.xdos.f LOAD usr/src/prodos.fx/prodos.s diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index 05a1f45c..37532189 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -2,11 +2,13 @@ NEW AUTO 3,1 *-------------------------------------- * If Called by ProDOS : SEI -* If Called directly from DEVPTRS vectors : ???? +* If Called directly from GP.DEVPTRS vectors : ???? *-------------------------------------- -XRW.START cld $D8 to flag language card bank 1 (main) +XRW.START .PH XRW - lda unitnum get unit number. +XRW.START1 cld $D8 to flag language card bank 1 (main) + + lda ZP.UNITNUM get unit number. pha @@ -28,7 +30,7 @@ XRW.START cld $D8 to flag language card bank 1 (main) pla and #$7F mask off high bit. - sta A2L 0SSS0000 for IO indexing + sta ZP.A2L 0SSS0000 for IO indexing * make sure other drives in other slots are stopped @@ -52,7 +54,7 @@ XRW.START cld $D8 to flag language card bank 1 (main) lda XRW.montimeh bne .1 *-------------------------------------- -XRW.Blk2TS lda bloknml +XRW.Blk2TS lda ZP.BLKNUM sta XRW.ReqTrack and #7 @@ -64,7 +66,7 @@ XRW.Blk2TS lda bloknml rol sta XRW.ReqSector - lda bloknml+1 + lda ZP.BLKNUM+1 ldx #3 @@ -73,7 +75,7 @@ XRW.Blk2TS lda bloknml dex bne .1 *-------------------------------------- - ldx A2L + ldx ZP.A2L jsr XRW.ReadMode jsr XRW.CheckMotorOn @@ -85,7 +87,7 @@ XRW.Blk2TS lda bloknml lda #$E8 24 up to 0 sta XRW.montimeh - lda unitnum determine drive 1 or 2. + lda ZP.UNITNUM determine drive 1 or 2. cmp XRW.LastUnitUsed same slot/drive used before ? sta XRW.LastUnitUsed save it for next time. php keep results of compare. @@ -97,7 +99,7 @@ XRW.Blk2TS lda bloknml .3 lda IO.D2.DrvSel1,x - ldx A2L + ldx ZP.A2L lda IO.D2.DrvOn,x turn on the drive. plp was it the same drive ? @@ -129,7 +131,7 @@ XRW.Blk2TS lda bloknml jsr XRW.CheckMotorOn is drive present ? beq XRW.E.ND *-------------------------------------- -XRW.Cmd lda A4L get command # +XRW.Cmd lda ZP.CMDNUM get command # bne .1 jsr XRW.TestWP 0 = status @@ -164,13 +166,13 @@ XRW.Cmd lda A4L get command # bcs XRW.E.IO -.4 inc buf+1 +.4 inc ZP.BUFPTR+1 inc XRW.ReqSector inc XRW.ReqSector jsr XRW.SectorIO get 2nd half of block - dec buf+1 + dec ZP.BUFPTR+1 bcc XRW.E.OK @@ -188,7 +190,7 @@ XRW.E.OK plp RESTORE IRQ STATE clc lda #0 -XRW.E.EXIT ldx A2L +XRW.E.EXIT ldx ZP.A2L bit IO.D2.DrvOff,x rts *-------------------------------------- @@ -237,8 +239,8 @@ XRW.Read txa get slot # sta rd7+1 sta rd8+1 - lda buf modify storage addresses also - ldy buf+1 + lda ZP.BUFPTR modify storage addresses also + ldy ZP.BUFPTR+1 sta ref3+1 sty ref3+2 sec @@ -288,14 +290,14 @@ L574A lda IO.D2.RData,x ldy #$AA lda #$00 -L5757 sta pcl use z-page for keeping checksum +L5757 sta ZP.PCL use z-page for keeping checksum rd4 ldx IO.D2.RData+$60 warning: self modified bpl rd4 lda XRW.Nib2FC-$96,x sta nbuf2-$AA,y save the two-bit groups in nbuf. - eor pcl update checksum. + eor ZP.PCL update checksum. iny next position in nbuf. bne L5757 loop for all $56 two-bit groups. @@ -351,7 +353,7 @@ rd8 ldx IO.D2.RData+$60 warning: self modified eor XRW.Nib2FC-$96,x checksum ok ? bne L57CC error if not. - ldx A2L test end marks. + ldx ZP.A2L test end marks. L57C2 lda IO.D2.RData,x bpl L57C2 @@ -365,12 +367,12 @@ L57CC sec L57CD pla place last byte into user buffer ldy #$55 - sta (buf),y + sta (ZP.BUFPTR),y .LIST ON XRW.Read.RTS rts .LIST OFF *-------------------------------------- -XRW.TestWP ldx A2L +XRW.TestWP ldx ZP.A2L lda IO.D2.ReadProt,x test for write protected lda IO.D2.ReadMode,x rol write protect-->carry-->bit 0=1 @@ -399,7 +401,7 @@ XRW.Write lda IO.D2.ReadProt,x (4) PREWRITE MODE ora IO.D2.WShift,x (4) ldy nbuf2 (4) - sty pcl (3) + sty ZP.PCL (3) ldy #6 (2) nop (2) @@ -436,8 +438,8 @@ L583D eor nbuf2-1,y (4) xor with current (NO MORE PAGE CROSS) tax (2) index to 7-bit nibl lda XRW.FC2Nib,x (4) must not cross page boundary -* ldx A2L (3) restore slot index - ldx >A2L (4) absolute reference to zero page +* ldx ZP.A2L (3) restore slot index + ldx >ZP.A2L (4) absolute reference to zero page sta IO.D2.WLoad,x (5) store encoded byte lda IO.D2.WShift,x (4) handshake @@ -446,7 +448,7 @@ L583D eor nbuf2-1,y (4) xor with current (NO MORE PAGE CROSS) * end of write byte loop - lda pcl (3) get prior nibl (from nbuf2) + lda ZP.PCL (3) get prior nibl (from nbuf2) wrefd1 ldy #$00 (2) warning: load value modified by prenib. @@ -461,17 +463,17 @@ wrefa2 lda $1000,y (4) prior nibl. warning: address modified by prenib. iny (2) all done with this page ? bne wrefa1 (3-) loop until page end. - lda pch (3) get next (precalculated & translated) nibl. + lda ZP.PCH (3) get next (precalculated & translated) nibl. beq L58C0 (2+) branch if code written was page aligned. - lda A2H (3) get byte address of last byte to be written. + lda ZP.A2H (3) get byte address of last byte to be written. beq L58B3 (2+) branch if only 1 byte left to write. lsr (2) test for odd or even last byte (carry set/clear) - lda pch (3) restore nibl to acc. + lda ZP.PCH (3) restore nibl to acc. sta IO.D2.WLoad,x (5) lda IO.D2.WShift,x (4) - lda A1L (3) = byte 0 of 2nd page xor'd with byte 1 if + lda ZP.A1L (3) = byte 0 of 2nd page xor'd with byte 1 if nop (2) above test set carry. iny (2) y=1 bcs L5899 (2+) branch if last byte to be odd. @@ -487,7 +489,7 @@ wrefa4 lda $1100,y (4) warning: modified by prenib iny (2) got prior nibl, point to next wrefa5 eor $1100,y (4) warning: modified by prenib -L5899 cpy A2H (3) set carry if this is the last nibl +L5899 cpy ZP.A2H (3) set carry if this is the last nibl and #$FC (2) strip low 2 bits tax (2) lda XRW.FC2Nib,x (4) @@ -501,7 +503,7 @@ wrefa6 lda $1100,y (4) get prior nibl. warning: modified by prenib L58B1 bcs L58C0 (3) branch always. -L58B3 lda >pch (4) absolute reference to zero page +L58B3 lda >ZP.PCH (4) absolute reference to zero page sta IO.D2.WLoad,x (5) lda IO.D2.WShift,x (4) pha (3) waste 14 micro-seconds total @@ -509,7 +511,7 @@ L58B3 lda >pch (4) absolute reference to zero page pha (3) pla (4) -L58C0 ldx A1H (3) use last nibl (anded with $FC) for checksum +L58C0 ldx ZP.A1H (3) use last nibl (anded with $FC) for checksum lda XRW.FC2Nib,x (4) wrefd5 ldx #$60 (2) restore slot. warning: modified by prenib sta IO.D2.WLoad,x (5) @@ -578,7 +580,7 @@ XRW.Wait100usecA rts *-------------------------------------- XRW.CheckMotorOn - ldx A2L + ldx ZP.A2L XRW.CheckMotorOnX ldy #0 init loop counter. @@ -601,7 +603,7 @@ XRW.ReadAddr ldy #$FC .LIST OFF sty XRW.CheckSum init nibble counter to $FCFC - ldx A2L get slot # + ldx ZP.A2L get slot # .1 iny bne .2 counter LO @@ -705,7 +707,7 @@ XRW.TrackSelect lda #2 rol A = 0/2 - ora A2L + ora ZP.A2L tay y = n0/n2 lda IO.D2.Ph0On,y PhOn 0/2 for Head0 or 1/3 for Head1 @@ -829,7 +831,7 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end jsr XRW.Wait25600usec -XRW.AllPhOff ldy A2L +XRW.AllPhOff ldy ZP.A2L lda IO.D2.Ph0Off,y lda IO.D2.Ph0Off+2,y lda IO.D2.Ph0Off+4,y @@ -847,7 +849,7 @@ XRW.AllPhOff ldy A2L .10 rts *-------------------------------------- XRW.SeekPhOnY and #6 - ora A2L + ora ZP.A2L tay lda IO.D2.Ph0On,y rts @@ -859,12 +861,12 @@ XRW.SeekPhOnY and #6 * Out: * A = *-------------------------------------- -XRW.Trk2Qtrk sta pch +XRW.Trk2Qtrk sta ZP.PCH lda XRW.D2VolNum-1,x bne .1 -.10 lda pch standard SS 4 qtrack stepping +.10 lda ZP.PCH standard SS 4 qtrack stepping asl asl rts @@ -874,7 +876,7 @@ XRW.Trk2Qtrk sta pch cmp #$85 bcs .10 > 192 ? must be a buggy 254 - lsr pch 2 sides + lsr ZP.PCH 2 sides .2 phx and #%00000111 stepping @@ -883,7 +885,7 @@ XRW.Trk2Qtrk sta pch lda #0 clc -.3 adc pch +.3 adc ZP.PCH dex bne .3 @@ -901,8 +903,8 @@ XRW.Trk2Qtrk sta pch * on exit: a,x,y undefined. write routine modified to do direct conversion * of high 6 bits of user's buffer data. *-------------------------------------- -XRW.PreNibble lda buf self-modify the addresses because of - ldy buf+1 the fast timing required. +XRW.PreNibble lda ZP.BUFPTR self-modify the addresses because of + ldy ZP.BUFPTR+1 the fast timing required. clc all offsets are minus $AA. adc #$02 the highest set is buf+$AC. @@ -962,40 +964,40 @@ prn3 lda $10AC,y warning: self modified. get byte from highest group. iny inc to next set. bne prn1 loop until all $56 nibls formed. - ldy buf now prepare data bytes for write16 subr. + ldy ZP.BUFPTR now prepare data bytes for write16 subr. dey prepare end address. - sty A2H - lda buf + sty ZP.A2H + lda ZP.BUFPTR sta wrefd1+1 warning: the following storage addresses beq L595F starting with 'wref' are refs into code eor #$FF space, changed by this routine. tay index to last byte of page in (buf). - lda (buf),y pre-niblize the last byte of the page + lda (ZP.BUFPTR),y pre-niblize the last byte of the page iny with the first byte of the next page. - eor (buf),y + eor (ZP.BUFPTR),y and #$FC tax lda XRW.FC2Nib,x get disk 7-bit nible equivalent. -L595F sta pch +L595F sta ZP.PCH beq L596F branch if data to be written is page aligned. - lda A2H check if last byte is even + lda ZP.A2H check if last byte is even lsr or odd address. shift even/odd -> carry. - lda (buf),y if even, then leave intact. + lda (ZP.BUFPTR),y if even, then leave intact. bcc L596D branch if odd. iny if even, then pre-xor with byte 1. - eor (buf),y -L596D sta A1L save result for write routine. + eor (ZP.BUFPTR),y +L596D sta ZP.A1L save result for write routine. L596F ldy #$FF index to last byte of data to write. - lda (buf),y to be used as a checksum. + lda (ZP.BUFPTR),y to be used as a checksum. and #$FC strip extra bits - sta A1H and save it. + sta ZP.A1H and save it. - ldy buf+1 now modify address references to + ldy ZP.BUFPTR+1 now modify address references to sty wrefa1+2 user data. sty wrefa2+2 @@ -1005,7 +1007,7 @@ L596F ldy #$FF index to last byte of data to write. sty wrefa5+2 sty wrefa6+2 - ldx A2L and lastly, index references to + ldx ZP.A2L and lastly, index references to stx wrefd2+1 controller. stx wrefd3+1 stx wrefd4+1 @@ -1167,7 +1169,12 @@ XRW.FC2Nib .HS 96 .HS 010303FE .HS 030303FF *-------------------------------------- + .EP +*-------------------------------------- + .LIST ON XRW.LEN .EQ *-XRW.START + .LIST OFF +*-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.xrw LOAD usr/src/prodos.fx/prodos.s diff --git a/ProDOS.FX/ProDOS.S.txt b/ProDOS.FX/ProDOS.S.txt index 52e4a1e9..adcac862 100644 --- a/ProDOS.FX/ProDOS.S.txt +++ b/ProDOS.FX/ProDOS.S.txt @@ -5,157 +5,46 @@ NEW .OR $2000 .TF PRODOS,TSYS *-------------------------------------- +KVER .EQ 23 release 2.0.3 +*-------------------------------------- READCAT .EQ 1 Boot Block read Catalog at $C00 ENHFILENAME .EQ 1 LOWERCASE .EQ 1 ACL .EQ 1 LOGO .EQ 1 -PM .EQ 1 -*-------------------------------------- -NSC.IOBASE .EQ $C300 +AUXLC .EQ 0 +M.PM .EQ 1 +M.RAM .EQ 1 *-------------------------------------- .INB inc/zp.i .INB inc/io.i + .INB inc/io.iigs.i .INB inc/io.d2.i - .INB inc/monitor.i .INB inc/mli.i .INB inc/mli.e.i + .INB inc/rom.ii.i + .INB inc/rom.iie.i + .INB inc/rom.iigs.i *-------------------------------------- -MMStartUp .EQ $0202 -NewHandle .EQ $0902 -PtrToHand .EQ $2802 -MessageCenter .EQ $1501 -DisposeHandle .EQ $1002 -MMShutDown .EQ $0302 -ReadTimeHex .EQ $0D03 -Int2Hex .EQ $220B -TLTextMountVolume .EQ $1201 -*-------------------------------------- - .MA SHORTMX - sep #$30 - .EM - .MA SHORTM - sep #$20 - .EM - .MA SHORTX - sep #$10 - .EM - .MA LONGMX - rep #$30 - .EM - .MA LONGM - rep #$20 - .EM - .MA LONGX - rep #$10 - .EM -*-------------------------------------- - .MA IIGS - ldx ##]1 - jsl $E10000 - .EM -*-------------------------------------- -P8QUIT .EQ $E0D000 -GSOS .EQ $E100A8 -GSOS2 .EQ $E100B0 -OS_BOOT .EQ $E100BD indicates O/S initially booted -*-------------------------------------- -lookptr .EQ $0A -idapple .EQ $0C model machine id -idxl .EQ $10 general use 16 bit index pointer -devid .EQ $12 -src .EQ $12 -dst .EQ $14 -cnt .EQ $16 -cde .EQ $18 -ecde .EQ $1A -*-------------------------------------- -pcl .EQ $3A -pch .EQ $3B -A1L .EQ $3C -A1H .EQ $3D -A2L .EQ $3E -A2H .EQ $3F -A3L .EQ $40 -A4L .EQ $42 -unitnum .EQ $43 -buf .EQ $44 2-byte data buffer pointer which -*accsav .EQ $45 overlaps accsav (temp acc save byte) -bloknml .EQ $46 used mostly as 16 bit block # pointer -zpt .EQ $48 highly used zero page index pointer -datptr .EQ $4A ptr to data area of buffer. -sos .EQ $4C sos buffer pointer. -usrbuf .EQ $4E data ptr in user buffer. -*-------------------------------------- -auxsp .EQ $0101 -RAMXDRV .EQ $0200 load address for aux bank /RAM driver -inbuf .EQ $0200 keyboard buffer -pbuf .EQ $0280 prefix buffer -softev .EQ $03F2 RESET vector -pwredup .EQ $03F4 power up byte -nmivect .EQ $03FB nmi handler +ILDR .EQ $0800 -vmode .EQ $04FB video firmware operating mode -ch80col .EQ $057B 80 column ch position +GP .EQ $BF00 +XRW .EQ $D000 +CLK .EQ $D742 -dbuf .EQ $0C00 8 page directory buffer -vblock1 .EQ $0E00 ramdisk directory block -volbuf .EQ $0F00 volume buffer -iobuf .EQ $1400 i/o buffer -fbuf .EQ $1800 FCB buffer -sysentry .EQ $2000 .SYS file load address +XDOS.PathBuf .EQ $D700 +*XDOS.prefixbuf .EQ $D742+125 +XDOS.FCBs .EQ $D800 8 opened files +XDOS.VCBs .EQ $D900 10 mounted vols +XDOS.BMBuf .EQ $DA00 512 byte bitmap buffer +XDOS.GBuf .EQ $DC00 general purpose 512 byte block buffer -xfer .EQ $C314 -*-------------------------------------- -pathbuf .EQ $D700 -XDOS.ClockDrv .EQ $D742 -prefixbuf .EQ $D742+125 -*-------------------------------------- -FCB.MAX .EQ 8 -FCBs .EQ $D800 -FCB.ID .EQ 0 -FCB.DEVID .EQ 1 d_dev -> d_dev+5 -FCB.DIRHBLK .EQ 2 2 bytes -FCB.DIREBLK .EQ 4 2 bytes -FCB.DIRENUM .EQ 6 -FCB.STYPE .EQ 7 -FCB.F .EQ 8 -FCB.F.STMOD .EQ %00001000 -FCB.F.UMOD .EQ %00010000 -FCB.F.DBLKMOD .EQ %01000000 -FCB.F.IBLKMOD .EQ %10000000 -FCB.ACCESS .EQ 9 -FCB.NLBYTE .EQ 10 -FCB.BUFID .EQ 11 -FCB.1stBLK .EQ 12 2 bytes -FCB.IBLK .EQ 14 2 bytes -FCB.DBLK .EQ 16 2 bytes -FCB.MARK .EQ 18 3 bytes -FCB.EOF .EQ 21 3 bytes -FCB.UBLK .EQ 24 2 bytes +XDOS .EQ $DE00 -FCB.FLEVEL .EQ 27 -FCB.DIRTY .EQ 28 +RAM .EQ $FF00 +IRQ .EQ $FF9B - -FCB.NLMASK .EQ 31 -* -FCB .EQ 32 -*-------------------------------------- -VCBs .EQ $D900 -* 6 free bytes -VCB0 .EQ 06 range $D906-$DA00 -VCB.DEV .EQ 16 -VCB.OFCNT .EQ 17 -VCB.BMAP .EQ 18 2 bytes -VCB.TBLK .EQ 20 2 bytes -VCB.FBLK .EQ 22 2 bytes -VCB.BMAPIDX .EQ 24 -* -VCB .EQ 25 -*-------------------------------------- -bmbuf .EQ $DA00 512 byte bitmap buffer -gbuf .EQ $DC00 general purpose 512 byte block buffer +RAMX .EQ $0200 *-------------------------------------- .DUMMY .OR $10 @@ -172,6 +61,8 @@ ZPBLLenBits .BS 1 .ED *-------------------------------------- .INB usr/src/prodos.fx/prodos.s.ldr +X.Unpak.XatYAX .DO AUXLC=1 + .FIN X.Unpak.XatYA sty ZPOutBufPtr sta ZPOutBufPtr+1 lda PAKME.Table,x @@ -179,118 +70,137 @@ X.Unpak.XatYA sty ZPOutBufPtr lda PAKME.Table+1,x sta ZPInBufPtr+1 .INB usr/src/shared/x.unpak.s - .DO LOGO + .DO LOGO=1 .INB usr/src/prodos.fx/prodos.s.logo .FIN *-------------------------------------- -PAKME.Table -PAKME.ILDR .DA ILDR.PAK -PAKME.GP .DA GP.PAK -PAKME.XRW .DA XRW.PAK -PAKME.XDOS .DA XDOS.PAK -PAKME.IRQ .DA IRQ.PAK -PAKME.RAM .DA RAM.PAK -PAKME.RAMX .DA RAMX.PAK -PAKME.DCLK .DA DCLK.PAK -PAKME.NCLK .DA NCLK.PAK -PAKME.TCLK .DA TCLK.PAK -PAKME.XCLK .DA XCLK.PAK -PAKME.CCLK .DA CCLK.PAK -PAKME.SEL1 .DA SEL1.PAK -PAKME.SEL2 .DA SEL2.PAK - ILDR.PAK .DA #0 .DA ILDR.LEN - .PH $800 .INB usr/src/prodos.fx/prodos.s.ildr - .EP GP.PAK .DA #0 .DA GP.LEN - .PH $BF00 .INB usr/src/prodos.fx/prodos.s.gp - .EP XRW.PAK .DA #0 .DA XRW.LEN - .PH $D000 .INB usr/src/prodos.fx/prodos.s.xrw - .EP XDOS.PAK .DA #0 .DA XDOS.LEN - .PH $DE00 .INB usr/src/prodos.fx/prodos.s.xdos.a .INB usr/src/prodos.fx/prodos.s.xdos.b .INB usr/src/prodos.fx/prodos.s.xdos.c .INB usr/src/prodos.fx/prodos.s.xdos.d .INB usr/src/prodos.fx/prodos.s.xdos.e .INB usr/src/prodos.fx/prodos.s.xdos.f - .EP IRQ.PAK .DA #0 .DA IRQ.LEN - .PH $FF9B .INB usr/src/prodos.fx/prodos.s.irq - .EP + .DO M.RAM=1 RAM.PAK .DA #0 .DA RAM.LEN - .PH $FF00 .INB usr/src/prodos.fx/prodos.s.ram - .EP RAMX.PAK .DA #0 .DA RAMX.LEN - .PH $200 .INB usr/src/prodos.fx/prodos.s.ramx - .EP + .FIN DCLK.PAK .DA #0 .DA DCLK.LEN - .PH XDOS.ClockDrv .INB usr/src/prodos.fx/prodos.s.dclk - .EP NCLK.PAK .DA #0 .DA NCLK.LEN - .PH XDOS.ClockDrv .INB usr/src/prodos.fx/prodos.s.nclk - .EP TCLK.PAK .DA #0 .DA TCLK.LEN - .PH XDOS.ClockDrv .INB usr/src/prodos.fx/prodos.s.tclk - .EP XCLK.PAK .DA #0 .DA XCLK.LEN - .PH XDOS.ClockDrv .INB usr/src/prodos.fx/prodos.s.xclk - .EP CCLK.PAK .DA #0 .DA CCLK.LEN - .PH XDOS.ClockDrv .INB usr/src/prodos.fx/prodos.s.cclk - .EP SEL1.PAK .DA #0 .DA SEL1.LEN - .PH $1000 .INB usr/src/prodos.fx/prodos.s.sel1 - .EP SEL2.PAK .DA #0 .DA SEL2.LEN - .PH $1000 .INB usr/src/prodos.fx/prodos.s.sel2 - .EP +*-------------------------------------- +PAKME.Table +PAKME.ID .SE 0 + +PAKME.ILDR.ID .EQ PAKME.ID +PAKME.ILDR .DA ILDR.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.GP.ID .EQ PAKME.ID +PAKME.GP .DA GP.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.XRW.ID .EQ PAKME.ID +PAKME.XRW .DA XRW.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.XDOS.ID .EQ PAKME.ID +PAKME.XDOS .DA XDOS.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.IRQ.ID .EQ PAKME.ID +PAKME.IRQ .DA IRQ.PAK +PAKME.ID .SE PAKME.ID+2 + + .DO M.RAM=1 +PAKME.RAM.ID .EQ PAKME.ID +PAKME.RAM .DA RAM.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.RAMX.ID .EQ PAKME.ID +PAKME.RAMX .DA RAMX.PAK +PAKME.ID .SE PAKME.ID+2 + .FIN + +PAKME.DCLK.ID .EQ PAKME.ID +PAKME.DCLK .DA DCLK.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.NCLK.ID .EQ PAKME.ID +PAKME.NCLK .DA NCLK.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.TCLK.ID .EQ PAKME.ID +PAKME.TCLK .DA TCLK.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.XCLK.ID .EQ PAKME.ID +PAKME.XCLK .DA XCLK.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.CCLK.ID .EQ PAKME.ID +PAKME.CCLK .DA CCLK.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.SEL1.ID .EQ PAKME.ID +PAKME.SEL1 .DA SEL1.PAK +PAKME.ID .SE PAKME.ID+2 + +PAKME.SEL2.ID .EQ PAKME.ID +PAKME.SEL2 .DA SEL2.PAK +PAKME.ID .SE PAKME.ID+2 *-------------------------------------- .AS "PAKME" TAG .DA $2000 BIN ORG - .DA #14 Chunk Count + .DA #PAKME.ID/2 Chunk Count .DA PAKME.Table Chunks *-------------------------------------- MAN diff --git a/SHARED/X.ARC.S.txt b/SHARED/X.ARC.S.txt new file mode 100644 index 00000000..7611b6c4 --- /dev/null +++ b/SHARED/X.ARC.S.txt @@ -0,0 +1,1534 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* ZPInBufPtr = Ptr to Uncompressed Data +* ZPOutBufPtr = Ptr to Shunk Data +* Y,A = ULEN +*-------------------------------------- +* ZPInBufPtr +* ZPOutBufPtr +* ZPBackPtr +* ZPStrPtr + *-------------------------------------- +X.Arc >STYA X.Arc.ShnkOut+S.ARCSHNK.ULEN + + eor #$ff + sta X.Arc.nCnt+1 + sta X.Arc.nCntOut+1 + tya + eor #$ff + sta X.Arc.nCnt + sta X.Arc.nCntOut + + stz X.Arc.ShnkOut+S.ARCSHNK.TBLBITS + stz X.Arc.ShnkOut+S.ARCSHNK.TBLBITS+1 + + >LDYA ZPInBufPtr + >STYA X.Arc.InBufPtr + >LDYA ZPOutBufPtr + >STYA X.Arc.OutBufPtr + + jsr X.Arc.Reset Reset counters +* PASS #1 + stz X.Arc.STRLen + + jsr X.Arc.Run1 + + lda #32 4 Bytes header + sta X.Arc.TBits + sta X.Arc.BLBits + sta X.Arc.TBLBits + + jsr X.Arc.ComputeTBits + + lda X.Arc.BLL.Max + beq .1 + + jsr X.Arc.ComputeBLBits + jsr X.Arc.ComputeTBLBits + +.1 .DO DBG + jsr X.Arc.PrintDBG1 + jsr X.Arc.PrintDBG2 + .FIN + + jsr X.Arc.Select + bcs .9 + + sta X.Arc.Alg +* PASS #2 + >LDYA X.Arc.InBufPtr + >STYA ZPInBufPtr + + >LDYA X.Arc.nCntOut + >STYA X.Arc.nCnt + + stz X.Arc.STRLen + + jsr X.Arc.Out.Init2 Initialize properly for first "PutBit" Call + bcs .9 + + jsr X.Arc.Run2 + bcs .9 + + .DO DBG + jsr X.Arc.ComputeDBG3 Get exact output bit count... + .FIN + + jsr X.Arc.Close ...before sending last FULL byte + bcs .9 + + .DO DBG + jsr X.Arc.PrintDBG3 + >DEBUG + .FIN + + jsr X.Arc.RestorePtrs + + >LDYA X.Arc.CLen + ldx X.Arc.Alg + clc + rts + +.9 jsr X.Arc.RestorePtrs + + >LDYA X.Arc.ShnkOut+S.ARCSHNK.ULEN + ldx #0 + sec + rts +*-------------------------------------- +X.Arc.RestorePtrs + >LDYA X.Arc.InBufPtr + >STYA ZPInBufPtr + >LDYA X.Arc.OutBufPtr + >STYA ZPOutBufPtr + rts +*-------------------------------------- +X.Arc.Reset ldx #X.Arc.ResetCnt + +.1 stz X.Arc.ResetData-1,x + dex + bne .1 + +* ldx #0 + +.2 stz X.Arc.TopCntL,x + stz X.Arc.TopCntH,x + stz X.Arc.TopCntBLL,x + stz X.Arc.TopCntBLH,x + inx + bne .2 + + lda X.Arc.ShnkOut+S.ARCSHNK.ULEN+1 + sta X.Arc.Bits+1 + + lda X.Arc.ShnkOut+S.ARCSHNK.ULEN + + ldx #3 + +.3 asl + rol X.Arc.Bits+1 + rol X.Arc.Bits+2 + dex + bne .3 + + sta X.Arc.Bits + + rts +*-------------------------------------- +X.Arc.Run1 inc X.Arc.nCnt + bne .1 + + inc X.Arc.nCnt+1 + beq X.Arc.StrStat 0 byte left, flush pending string + +.1 jsr X.Arc.ScanBL + bcc .5 + + lda (ZPInBufPtr) + + tax + inc X.Arc.TopCntBLL,x + bne .2 + + inc X.Arc.TopCntBLH,x + +.2 inc X.Arc.TopCntL,x + bne .3 + + inc X.Arc.TopCntH,x + +.3 inc X.Arc.STRLen + lda X.Arc.STRLen + cmp #STR.MAX + bcc .4 + + jsr X.Arc.StrStat Max Len string, flush + +.4 inc ZPInBufPtr + bne X.Arc.Run1 + + inc ZPInBufPtr+1 + bra X.Arc.Run1 +*-------------------------------------- +.5 jsr X.Arc.StrStat flush pending string + + jsr X.Arc.BlStat + + ldy X.Arc.BLLen + jsr X.Arc.StrSkipY + bcc .1 + + clc End Of InBuf + rts +*-------------------------------------- +X.Arc.StrStat lda X.Arc.STRLen + tay + beq .8 + + cmp #STR.MIN + bcs .1 + +* clc + adc X.Arc.S.TB.Cnt + sta X.Arc.S.TB.Cnt + bcc .5 + + inc X.Arc.S.TB.Cnt+1 + bra .5 + +.1 clc + adc X.Arc.STR.TB.Cnt + sta X.Arc.STR.TB.Cnt + bcc .2 + + inc X.Arc.STR.TB.Cnt+1 + +.2 lda X.Arc.STRLen + cmp X.Arc.STR.Max + bcc .3 + + sta X.Arc.STR.Max + +.3 cmp #STR.MID + bcc .4 + + inc X.Arc.STR.LL.Cnt + bne .5 + + inc X.Arc.STR.LL.Cnt+1 + bra .5 + +.4 inc X.Arc.STR.SL.Cnt + bne .5 + + inc X.Arc.STR.SL.Cnt+1 + +.5 ldy #0 + +.6 lda (ZPStrPtr),y + tax + + inc X.Arc.TopCntL,x + bne .7 + + inc X.Arc.TopCntH,x + +.7 iny + cpy X.Arc.STRLen + bne .6 + + stz X.Arc.STRLen + +.8 rts +*-------------------------------------- +X.Arc.StrSkipY tya + clc + adc ZPInBufPtr + sta ZPInBufPtr + bcc .1 + + inc ZPInBufPtr+1 + +.1 tya + clc + adc X.Arc.nCnt + sta X.Arc.nCnt + bcc .8 + + inc X.Arc.nCnt+1 + beq .8 CS + + clc + +.8 rts +*-------------------------------------- +X.Arc.BlStat lda X.Arc.BLLen + clc + adc X.Arc.BL.TB.Cnt + sta X.Arc.BL.TB.Cnt + bcc .10 + + inc X.Arc.BL.TB.Cnt+1 + +.10 lda X.Arc.BLLen + cmp X.Arc.BLL.Max + bcc .11 + + sta X.Arc.BLL.Max + +.11 cmp #BLL.MID + bcc .12 + + inc X.Arc.BLL.LL.Cnt + bne .20 + + inc X.Arc.BLL.LL.Cnt+1 + bra .20 + +.12 inc X.Arc.BLL.SL.Cnt + bne .20 + + inc X.Arc.BLL.SL.Cnt+1 +* BLOFS +.20 >LDYA X.Arc.Ofs + cpy X.Arc.BLO.Max + pha + sbc X.Arc.BLO.Max+1 + pla + bcc .21 + + >STYA X.Arc.BLO.Max + +.21 jsr X.Arc.GetYABitCntInX + inc X.Arc.BLO.LO.cnt-1,x + bne .8 + + inc X.Arc.BLO.HI.cnt-1,x + +.8 rts +*-------------------------------------- +X.Arc.ComputeTBits + ldy #0 + +.1 stz X.Arc.Cnt Init best score to 0 + stz X.Arc.Cnt+1 + + sec + ror X.Arc.bStop + + ldx #0 + +.2 lda X.Arc.TopCntH,x + bne .20 + + lda X.Arc.TopCntL,x + cmp #TOP.MIN.CNT + bcc .3 + +.20 stz X.Arc.bStop + + lda X.Arc.Cnt + cmp X.Arc.TopCntL,x is it better at X + lda X.Arc.Cnt+1 + sbc X.Arc.TopCntH,x + bcs .3 not better or equal... + + stx X.Arc.Best save new score index... + + lda X.Arc.TopCntL,x + sta X.Arc.Cnt ...and value + lda X.Arc.TopCntH,x + sta X.Arc.Cnt+1 + +.3 inx + bne .2 + + bit X.Arc.bStop + bmi .6 + + ldx X.Arc.Best + lda X.Arc.TOP.Widths,y + clc + adc #ARC.B.RAWTOP.W add ARC.B.TOP bits + +.4 pha + + lda X.Arc.TopCntL,x + clc + adc X.Arc.TBits + sta X.Arc.TBits + + lda X.Arc.TopCntH,x + adc X.Arc.TBits+1 + sta X.Arc.TBits+1 + bcc .5 + + inc X.Arc.TBits+2 + +.5 pla + dec + bne .4 + + lda X.Arc.Best + sta X.Arc.TopT,y + tax + stz X.Arc.TopCntL,x Discard this entry + stz X.Arc.TopCntH,x + iny + cpy #TOP.MAX + bne .1 + +.6 sty X.Arc.TopTSize + lda #0 + ldx #8 Add Top Table Size + jsr X.Arc.AddXtYA2TBits + + ldx #0 + +.7 lda X.Arc.TopCntL,x + tay + ora X.Arc.TopCntH,x + beq .10 + + lda X.Arc.TopCntH,x + + phx + + ldx #ARC.B.RAWTOP.W+8 add ARC.B.RAW bit + jsr X.Arc.AddXtYA2TBits + + plx + +.10 inx + bne .7 + + rts +*-------------------------------------- +X.Arc.AddXtYA2TBits + pha + + txa + beq .9 + +.1 tya + clc + adc X.Arc.TBits + sta X.Arc.TBits + + pla + pha + + adc X.Arc.TBits+1 + sta X.Arc.TBits+1 + bcc .2 + + inc X.Arc.TBits+2 + +.2 dex + bne .1 + +.9 pla + rts +*-------------------------------------- +X.Arc.ComputeBLBits + lda X.Arc.STR.Max + beq .10 + + sec + sbc #STR.MID + bcc .10 + + bne .13 + + inc + +.13 jsr X.Arc.GetABitCntInX + + stx X.Arc.STR.Bits + +.10 lda X.Arc.BLL.Max + beq .40 + + sec + sbc #BLL.MID + bcc .30 + + bne .12 + + inc + +.12 jsr X.Arc.GetABitCntInX + stx X.Arc.BLL.Bits + +.30 >LDYA X.Arc.BLO.Max + jsr X.Arc.GetYABitCntInX + stx X.Arc.BLO.Bits +*-------------------------------------- +.40 ldx #ARC.B.PREFIX.W+8 + >LDYA X.Arc.S.TB.Cnt + jsr X.Arc.AddXtYA2BLBits + + ldx #8 + >LDYA X.Arc.STR.TB.Cnt + jsr X.Arc.AddXtYA2BLBits +* SLEN + lda X.Arc.STR.Bits + bne .50 + + ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.SHORTSTR.W + >LDYA X.Arc.STR.SL.Cnt + jsr X.Arc.AddXtYA2BLBits + bra .51 + +.50 clc + adc #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W + tax + >LDYA X.Arc.STR.LL.Cnt + jsr X.Arc.AddXtYA2BLBits + + ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W+ARC.B.SHORTSTR.W + >LDYA X.Arc.STR.SL.Cnt + jsr X.Arc.AddXtYA2BLBits +* BLLEN +.51 lda X.Arc.BLL.Bits + bne .60 + + ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.SHORTBLL.W + >LDYA X.Arc.BLL.SL.Cnt + jsr X.Arc.AddXtYA2BLBits + bra .61 + +.60 clc + adc #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W + tax + >LDYA X.Arc.BLL.LL.Cnt + jsr X.Arc.AddXtYA2BLBits + + ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W+ARC.B.SHORTBLL.W + >LDYA X.Arc.BLL.SL.Cnt + jsr X.Arc.AddXtYA2BLBits +* BLOFS +.61 ldx #12 + +.62 phx + + ldy X.Arc.BLO.LO.cnt-1,x + lda X.Arc.BLO.HI.cnt-1,x + + ldx X.Arc.BLO.Bits + + jsr X.Arc.AddXtYA2BLBits + plx + dex + bne .62 + + rts + +X.Arc.AddXtYA2BLBits + pha + + txa + beq .9 + +.1 tya + clc + adc X.Arc.BLBits + sta X.Arc.BLBits + + pla + pha + + adc X.Arc.BLBits+1 + sta X.Arc.BLBits+1 + bcc .2 + + inc X.Arc.BLBits+2 + +.2 dex + bne .1 + +.9 pla + rts +*-------------------------------------- +X.Arc.ComputeTBLBits + ldy #0 + +.1 stz X.Arc.Cnt Init best score to 0 + stz X.Arc.Cnt+1 + + sec + ror X.Arc.bStop + + ldx #0 + +.2 lda X.Arc.TopCntBLH,x + bne .20 + + lda X.Arc.TopCntBLL,x + cmp #TOP.MIN.CNT + bcc .3 + +.20 stz X.Arc.bStop + + lda X.Arc.Cnt + cmp X.Arc.TopCntBLL,x is it better at X + lda X.Arc.Cnt+1 + sbc X.Arc.TopCntBLH,x + bcs .3 not better or equal... + + stx X.Arc.Best save new score index... + + lda X.Arc.TopCntBLL,x + sta X.Arc.Cnt ...and value + lda X.Arc.TopCntBLH,x + sta X.Arc.Cnt+1 + +.3 inx + bne .2 + + bit X.Arc.bStop + bmi .6 + + ldx X.Arc.Best + lda X.Arc.TOP.Widths,y + clc + adc #ARC.B.RAWTOP.W add ARC.B.TOP bit + +.4 pha + + lda X.Arc.TopCntBLL,x + clc + adc X.Arc.TBLBits + sta X.Arc.TBLBits + + lda X.Arc.TopCntBLH,x + adc X.Arc.TBLBits+1 + sta X.Arc.TBLBits+1 + bcc .5 + + inc X.Arc.TBLBits+2 + +.5 pla + dec + bne .4 + + lda X.Arc.Best + sta X.Arc.TopTBL,y + tax + stz X.Arc.TopCntBLL,x Discard this entry + stz X.Arc.TopCntBLH,x + iny + cpy #TOP.MAX + bne .1 + +.6 sty X.Arc.TopTBLSize + lda #0 + ldx #8 + jsr X.Arc.AddXtYA2TBLBits + + ldx #0 + +.7 lda X.Arc.TopCntBLL,x + tay + ora X.Arc.TopCntBLH,x + beq .10 + + lda X.Arc.TopCntBLH,x + + phx + + ldx #ARC.B.RAWTOP.W+8 add ARC.B.RAW bit + jsr X.Arc.AddXtYA2TBLBits + + plx + +.10 inx + bne .7 + +X.Arc.ComputeBLBits4TBL + + ldx #ARC.B.PREFIX.W add ARC.B.SINGLE bits + >LDYA X.Arc.S.TB.Cnt + jsr X.Arc.AddXtYA2TBLBits +* SLEN + lda X.Arc.STR.Bits + bne .50 + + ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.SHORTSTR.W + >LDYA X.Arc.STR.SL.Cnt + jsr X.Arc.AddXtYA2TBLBits + bra .51 + +.50 clc + adc #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W + tax + >LDYA X.Arc.STR.LL.Cnt + jsr X.Arc.AddXtYA2TBLBits + + ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W+ARC.B.SHORTSTR.W + >LDYA X.Arc.STR.SL.Cnt + jsr X.Arc.AddXtYA2TBLBits +* BLLEN +.51 lda X.Arc.BLL.Bits + bne .60 + + ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.SHORTBLL.W + >LDYA X.Arc.BLL.SL.Cnt + jsr X.Arc.AddXtYA2TBLBits + bra .61 + +.60 clc + adc #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W + tax + >LDYA X.Arc.BLL.LL.Cnt + jsr X.Arc.AddXtYA2TBLBits + + ldx #ARC.B.PREFIX.W+ARC.B.STRBL.W+ARC.B.LEN.W+ARC.B.SHORTBLL.W + >LDYA X.Arc.BLL.SL.Cnt + jsr X.Arc.AddXtYA2TBLBits +* BLOFS +.61 ldx #12 + +.62 phx + + ldy X.Arc.BLO.LO.cnt-1,x + lda X.Arc.BLO.HI.cnt-1,x + + ldx X.Arc.BLO.Bits + + jsr X.Arc.AddXtYA2TBLBits + plx + dex + bne .62 + + rts +*-------------------------------------- +X.Arc.AddXtYA2TBLBits + pha + + txa + beq .9 + +.1 tya + clc + adc X.Arc.TBLBits + sta X.Arc.TBLBits + + pla + pha + + adc X.Arc.TBLBits+1 + sta X.Arc.TBLBits+1 + bcc .2 + + inc X.Arc.TBLBits+2 + +.2 dex + bne .1 + +.9 pla + rts +*-------------------------------------- +X.Arc.Select stz X.Arc.bScanBL + + ldx #0 + ldy #4 + +.1 lda X.Arc.Bits,y + cmp X.Arc.Bits,x + lda X.Arc.Bits+1,y + sbc X.Arc.Bits+1,x + lda X.Arc.Bits+2,y + sbc X.Arc.Bits+2,x + bcs .2 + + tya + tax + +.2 iny + iny + iny + iny + cpy #16 + bne .1 + +* ldx #4 + + txa + beq .9 CS + + lda #0 + + cpx #8 < BL,TBL ? + bcc .3 only T + + lda X.Arc.BLL.Bits + asl + asl + asl + asl + ora X.Arc.BLO.Bits + sta X.Arc.ShnkOut+S.ARCSHNK.TBLBITS+1 + + lda X.Arc.STR.Bits + asl + asl + asl + asl + asl + sta X.Arc.ShnkOut+S.ARCSHNK.TBLBITS + + dec X.Arc.bScanBL + + cpx #8 only BL ? + beq .8 + + bra .5 TBL + +.3 ldy X.Arc.TopTSize + +.4 lda X.Arc.TopT-1,y + sta X.Arc.ShnkOut+S.ARCSHNK.TOPBYTES-1,y + dey + bne .4 + + lda X.Arc.TopTSize + bra .7 + +.5 ldy X.Arc.TopTBLSize + +.6 lda X.Arc.TopTBL-1,y + sta X.Arc.ShnkOut+S.ARCSHNK.TOPBYTES-1,y + dey + bne .6 + + lda X.Arc.TopTBLSize + +.7 sta X.Arc.TopSize + lsr + tsb X.Arc.ShnkOut+S.ARCSHNK.TBLBITS + lda #0 + ror + tsb X.Arc.ShnkOut+S.ARCSHNK.TBLBITS+1 + +.8 txa X=4,8 or 12 + lsr + + clc + rts + +.9 lda #E.BUF +* sec + rts +*-------------------------------------- +X.Arc.Out.Init2 ldy #0 + +.1 lda X.Arc.ShnkOut,y + jsr X.Arc.PutByte + bcs .9 + + iny + cpy #S.ARCSHNK.TOPBYTES + bne .1 + + ldx X.Arc.TopSize + beq .8 + +.2 lda X.Arc.ShnkOut,y + jsr X.Arc.PutByte + bcs .9 + + iny + dex + bne .2 + +.8 lda #$80 + sta X.Arc.OutMask + stz X.Arc.OutByte + + clc +.9 rts +*-------------------------------------- +X.Arc.Run2 +* >DEBUG + bit X.Arc.bScanBL + bmi X.Arc.Run2BLTBL + +X.Arc.Run2T inc X.Arc.nCnt + bne .1 + + inc X.Arc.nCnt+1 + beq .8 0 byte left... + +.1 lda (ZPInBufPtr) + jsr X.Arc.PutByte8 + bcs .9 + + inc ZPInBufPtr + bne X.Arc.Run2T + + inc ZPInBufPtr+1 + bra X.Arc.Run2T + +.8 clc +.9 rts + +X.Arc.Run2BLTBL inc X.Arc.nCnt + bne .1 + + inc X.Arc.nCnt+1 + beq .8 + +.1 jsr X.Arc.ScanBL + bcc .5 + + lda X.Arc.STRLen + bne .2 + + lda ZPInBufPtr + sta ZPStrPtr + lda ZPInBufPtr+1 + sta ZPStrPtr+1 + + inc X.Arc.STRLen + bra .3 + +.2 inc + sta X.Arc.STRLen + cmp #STR.MAX + bcc .3 + + jsr X.Arc.PutSTR + bcs .9 + +.3 inc ZPInBufPtr + bne X.Arc.Run2BLTBL + + inc ZPInBufPtr+1 + + bra X.Arc.Run2BLTBL +*-------------------------------------- +.5 jsr X.Arc.PutSTR + bcs .9 + + jsr X.Arc.PutBL + bcs .9 + + lda X.Arc.BLLen + clc + adc ZPInBufPtr + sta ZPInBufPtr + bcc .6 + + inc ZPInBufPtr+1 + +.6 lda X.Arc.BLLen + clc + adc X.Arc.nCnt + sta X.Arc.nCnt + bcc .1 + + inc X.Arc.nCnt+1 + bmi .1 + +.8 jmp X.Arc.PutSTR + +.9 rts +*-------------------------------------- +X.Arc.ScanBL lda ZPInBufPtr + sec + sbc #BLO.WINDOW + tax + + lda ZPInBufPtr+1 + sbc /BLO.WINDOW + pha + cpx X.Arc.InBufPtr + sbc X.Arc.InBufPtr+1 + pla + bcs .10 + + ldx X.Arc.InBufPtr Start at beginning of Src buf + lda X.Arc.InBufPtr+1 + +.10 stx ZPBackPtr + sta ZPBackPtr+1 + + stz X.Arc.BLLen Nothing found yet + +.1 lda ZPBackPtr + sec + sbc ZPInBufPtr + sta X.Arc.OfsWnCnt + + lda ZPBackPtr+1 + sbc ZPInBufPtr+1 + sta X.Arc.OfsWnCnt+1 ZPBackPtr < !OfsWnCnt < ZPInBufPtr + bcs .8 ZPBackPtr = ZPInBufPtr, exit + + >LDYA X.Arc.nCnt make sure not going past End Buffer + >STYA X.Arc.OfsBnCnt while reading ahead... + + ldy #0 ...or Y = BL.MAX + +.2 inc X.Arc.OfsWnCnt + bne .3 + + inc X.Arc.OfsWnCnt+1 + beq .6 ZPBackPtr = ZPInBufPtr + +.3 inc X.Arc.OfsBnCnt + bne .4 + + inc X.Arc.OfsBnCnt+1 + beq .6 Last Src Data + +.4 lda (ZPInBufPtr),y + cmp (ZPBackPtr),y + bne .6 End of string matching + +.5 iny + cpy #BLL.MAX + bne .2 Max BL len + +.6 cpy #BLL.MIN + bcc .7 not long enough + + cpy X.Arc.BLLen + bcc .7 not better ... +* beq .7 !!! same...but closer !!! + + sty X.Arc.BLLen + tya + clc + adc ZPBackPtr + sta X.Arc.Ofs + lda ZPBackPtr+1 + adc #0 + sta X.Arc.Ofs+1 Make X.Arc.Ofs pointing to the END + + lda ZPInBufPtr + sec + sbc X.Arc.Ofs + sta X.Arc.Ofs + + lda ZPInBufPtr+1 + sbc X.Arc.Ofs+1 + sta X.Arc.Ofs+1 + +.7 inc ZPBackPtr + bne .1 + + inc ZPBackPtr+1 + bra .1 + +.8 lda X.Arc.BLLen exit with result flag in C + beq .9 no BL CS + + clc + +.9 rts +*-------------------------------------- +X.Arc.GetYABitCntInX + tax + beq .2 + + ldx #17 BitCnt = bc(A) + 8 + +.1 dex + asl + bcc .1 + +.9 rts + +.2 tya BitCnt = bc(Y) + beq .9 +*-------------------------------------- +X.Arc.GetABitCntInX + ldx #9 + +.1 dex + asl + bcc .1 + + rts +*-------------------------------------- +X.Arc.PutSTR lda X.Arc.STRLen + beq .8 + + cmp #STR.MIN + bcs .3 + +.1 ldx #ARC.B.PREFIX.W + lda #ARC.B.SINGLE + jsr X.Arc.PutXBits + bcs .9 + + lda (ZPStrPtr) + jsr X.Arc.PutByte8 + bcs .9 + + inc ZPStrPtr + bne .2 + + inc ZPStrPtr+1 + +.2 dec X.Arc.STRLen + bne .1 + +* clc + + rts +*-------------------------------------- +.3 ldx #ARC.B.PREFIX.W + lda #ARC.B.STRBL + jsr X.Arc.PutXBits + bcs .9 + + ldx #ARC.B.STRBL.W + lda #ARC.B.STR + jsr X.Arc.PutXBits + bcs .9 + + lda X.Arc.STR.Bits + beq .5 + + lda X.Arc.STRLen + cmp #STR.MID + bcc .4 + + ldx #ARC.B.LEN.W + lda #ARC.B.LONG.B + jsr X.Arc.PutXBits + bcs .9 + + lda X.Arc.STRLen + sec + sbc #STR.MID + ldx X.Arc.STR.Bits + jsr X.Arc.PutXBits + bcs .9 + + bra .6 +*-------------------------------------- +.4 ldx #ARC.B.LEN.W + lda #ARC.B.SHORT.B + jsr X.Arc.PutXBits + bcs .9 + +.5 ldx #ARC.B.SHORTSTR.W + lda X.Arc.STRLen + sec + sbc #STR.MIN + jsr X.Arc.PutXBits + bcs .9 + +.6 lda (ZPStrPtr) + jsr X.Arc.PutByte8 + bcs .9 + + inc ZPStrPtr + bne .7 + + inc ZPStrPtr+1 + +.7 dec X.Arc.STRLen + bne .6 + +.8 clc +.9 rts +*-------------------------------------- +X.Arc.PutBL ldx #ARC.B.PREFIX.W + lda #ARC.B.STRBL + jsr X.Arc.PutXBits + bcs .9 + + ldx #ARC.B.STRBL.W + lda #ARC.B.BL + jsr X.Arc.PutXBits + bcs .9 +* BLLen + lda X.Arc.BLL.Bits + beq .2 no long len... + + lda X.Arc.BLLen + cmp #BLL.MID + bcc .1 this one is short + + ldx #ARC.B.LEN.W + lda #ARC.B.LONG.B + jsr X.Arc.PutXBits + bcs .9 + + lda X.Arc.BLLen + sec + sbc #BLL.MID + ldx X.Arc.BLL.Bits + jsr X.Arc.PutXBits + bcc .3 + +.9 rts +*-------------------------------------- +.1 ldx #ARC.B.LEN.W + lda #ARC.B.SHORT.B + jsr X.Arc.PutXBits + bcs .9 + +.2 ldx #ARC.B.SHORTBLL.W + lda X.Arc.BLLen + sec + sbc #BLL.MIN + jsr X.Arc.PutXBits + bcs .9 +* BLOFS +.3 ldx X.Arc.BLO.Bits + cpx #9 + bcc .4 + + txa +* sec + sbc #8 + tax + lda X.Arc.Ofs+1 + jsr X.Arc.PutXBits + bcs .9 + + ldx #8 + +.4 lda X.Arc.Ofs + bra X.Arc.PutXBits +*-------------------------------------- +X.Arc.PutByte8 ldy X.Arc.TopSize + beq .4 No TOP Table + + dey Range 0-63 + +.1 cmp X.Arc.ShnkOut+S.ARCSHNK.TOPBYTES,y + beq .5 + + dey + bpl .1 + + tay + + ldx #ARC.B.RAWTOP.W + lda #ARC.B.RAW + jsr X.Arc.PutXBits + bcs .9 + + tya + +.4 ldx #8 + bra X.Arc.PutXBits + +.9 rts + +.5 ldx #ARC.B.RAWTOP.W + lda #ARC.B.TOP + jsr X.Arc.PutXBits + bcs .9 + + tya + + and X.Arc.TOP.Masks,y + ora X.Arc.TOP.Bits,y + ldx X.Arc.TOP.Widths,y +*-------------------------------------- +X.Arc.PutXBits phx + +.1 cpx #8 + beq .2 + + asl + inx + bra .1 + +.2 plx + +.3 asl + + pha + + bcc .4 + + lda X.Arc.OutMask + tsb X.Arc.OutByte + +.4 lsr X.Arc.OutMask + bcc .5 + + ror X.Arc.OutMask + + lda X.Arc.OutByte + stz X.Arc.OutByte + + jsr X.Arc.PutByte + +.5 pla + bcs .9 + + dex + bne .3 + +* clc + + rts + +.9 lda #E.BUF + +* sec + + rts +*-------------------------------------- +X.Arc.PutByte inc X.Arc.nCntOut + bne .1 + + inc X.Arc.nCntOut+1 + beq .9 + +.1 sta (ZPOutBufPtr) + inc ZPOutBufPtr + bne .2 + + inc ZPOutBufPtr+1 + +.2 inc X.Arc.CLen + bne .8 + + inc X.Arc.CLen+1 + +.8 clc + rts + +.9 lda #E.BUF + sec + rts +*-------------------------------------- +X.Arc.Close lda X.Arc.OutMask + bmi .8 + + lda X.Arc.OutByte + bra X.Arc.PutByte + +.8 clc + rts +*-------------------------------------- + .DO DBG +X.Arc.PrintDBG1 >PUSHW L.MSG.DBG1 + + >PUSHL X.Arc.Bits + >PUSHL X.Arc.TBits + >PUSHL X.Arc.BLBits + >PUSHL X.Arc.TBLBits + + >PUSHB X.Arc.TopTSize + >PUSHB X.Arc.TopTBLSize + >PUSHB X.Arc.STR.Max + >PUSHB X.Arc.BLL.Max + >PUSHW X.Arc.BLO.Max + + >PUSHBI 22 + >SYSCALL2 PrintF + rts + +X.Arc.PrintDBG2 >PUSHW L.MSG.DBG2 + + >PUSHW X.Arc.S.TB.Cnt + >PUSHW X.Arc.STR.TB.Cnt + >PUSHW X.Arc.BL.TB.Cnt + + >PUSHW X.Arc.STR.SL.Cnt + >PUSHW X.Arc.STR.LL.Cnt + + >PUSHBI ARC.B.SHORTSTR.W + >PUSHB X.Arc.STR.Bits + + >PUSHW X.Arc.BLL.SL.Cnt + >PUSHW X.Arc.BLL.LL.Cnt + + >PUSHBI ARC.B.SHORTBLL.W + >PUSHB X.Arc.BLL.Bits + >PUSHB X.Arc.BLO.Bits + + ldx #0 + +.1 >PUSHB X.Arc.BLO.HI.cnt,x + >PUSHB X.Arc.BLO.LO.cnt,x + + inx + cpx #12 + bne .1 + + >PUSHBI 43 + >SYSCALL2 PrintF + rts + +X.Arc.ComputeDBG3 + stz X.Arc.Bits+3 + stz X.Arc.Bits+2 + lda X.Arc.CLen+1 + sta X.Arc.Bits+1 + + lda X.Arc.CLen + asl + rol X.Arc.Bits+1 + rol X.Arc.Bits+2 + asl + rol X.Arc.Bits+1 + rol X.Arc.Bits+2 + asl + rol X.Arc.Bits+1 + rol X.Arc.Bits+2 + sta X.Arc.Bits + + ldx #0 + + lda X.Arc.OutMask + bmi .3 + +.1 inx + asl + bpl .1 + +.2 txa + clc + adc X.Arc.Bits + sta X.Arc.Bits + bcc .3 + + inc X.Arc.Bits+1 + bne .3 + + inc X.Arc.Bits+2 + +.3 rts + +X.Arc.PrintDBG3 >PUSHW L.MSG.DBG3 + >PUSHL X.Arc.Bits + >PUSHW X.Arc.CLen + >PUSHB X.Arc.Alg + >PUSHBI 7 + >SYSCALL2 PrintF + rts + .FIN +*-------------------------------------- +CS.END +*-------------------------------------- +* from 1 to 12 (1 to 4095) +*-------------------------------------- +BLO.LenBits .DA #%11 bc= 1 + .DA #%11 bc= 1 + .DA #%11 bc= 3 + .DA #%11 bc= 4 : Range 0..15 (4 bits ofs) + .DA #%10 bc= 5 + .DA #%10 bc= 6 + .DA #%10 bc= 7 + .DA #%10 bc= 8 : Range 0..255 (8 bits ofs) + .DA #%0 bc=a 9 + .DA #%0 bc=10 + .DA #%0 bc=11 + .DA #%0 bc=12 : Range 0..4095 (12 bits ofs) +*-------------------------------------- +X.Arc.TOP.Masks .DA #ARC.B.TOP0.M,#ARC.B.TOP0.M,#ARC.B.TOP0.M,#ARC.B.TOP0.M + .DA #ARC.B.TOP0.M,#ARC.B.TOP0.M,#ARC.B.TOP0.M,#ARC.B.TOP0.M + + .DA #ARC.B.TOP8.M,#ARC.B.TOP8.M,#ARC.B.TOP8.M,#ARC.B.TOP8.M + .DA #ARC.B.TOP8.M,#ARC.B.TOP8.M,#ARC.B.TOP8.M,#ARC.B.TOP8.M + + .DA #ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M + .DA #ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M + .DA #ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M + .DA #ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M,#ARC.B.TOP16.M + +X.Arc.TOP.Widths + .DA #ARC.B.TOP0.W,#ARC.B.TOP0.W,#ARC.B.TOP0.W,#ARC.B.TOP0.W + .DA #ARC.B.TOP0.W,#ARC.B.TOP0.W,#ARC.B.TOP0.W,#ARC.B.TOP0.W + + .DA #ARC.B.TOP8.W,#ARC.B.TOP8.W,#ARC.B.TOP8.W,#ARC.B.TOP8.W + .DA #ARC.B.TOP8.W,#ARC.B.TOP8.W,#ARC.B.TOP8.W,#ARC.B.TOP8.W + + .DA #ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W + .DA #ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W + .DA #ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W + .DA #ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W,#ARC.B.TOP16.W + +X.Arc.TOP.Bits .DA #ARC.B.TOP0.B,#ARC.B.TOP0.B,#ARC.B.TOP0.B,#ARC.B.TOP0.B + .DA #ARC.B.TOP0.B,#ARC.B.TOP0.B,#ARC.B.TOP0.B,#ARC.B.TOP0.B + + .DA #ARC.B.TOP8.B,#ARC.B.TOP8.B,#ARC.B.TOP8.B,#ARC.B.TOP8.B + .DA #ARC.B.TOP8.B,#ARC.B.TOP8.B,#ARC.B.TOP8.B,#ARC.B.TOP8.B + + .DA #ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B + .DA #ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B + .DA #ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B + .DA #ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B,#ARC.B.TOP16.B +*-------------------------------------- +X.Arc.nCnt .BS 2 +X.Arc.nCntOut .BS 2 +X.Arc.InBufPtr .BS 2 +X.Arc.OutBufPtr .BS 2 + +X.Arc.Best .EQ * ComputeXXXbits +X.Arc.STRLen .BS 1 +X.Arc.BLLen .BS 1 +X.Arc.bStop .EQ * +X.Arc.Ofs .BS 2 +X.Arc.Cnt .EQ * +X.Arc.OfsWnCnt .BS 2 +X.Arc.OfsBnCnt .BS 2 + +X.Arc.OutMask .BS 1 +X.Arc.OutByte .BS 1 + +X.Arc.ShnkOut .BS S.ARCSHNK +*-------------------------------------- +X.Arc.ResetData .EQ * + +X.Arc.CLen .BS 2 +X.Arc.Alg .BS 1 + +X.Arc.Bits .BS 4 +X.Arc.TBits .BS 4 +X.Arc.BLBits .BS 4 +X.Arc.TBLBits .BS 4 + +X.Arc.TopT .BS TOP.MAX +X.Arc.TopTSize .BS 1 +X.Arc.TopTBL .BS TOP.MAX +X.Arc.TopTBLSize .BS 1 + +X.Arc.S.TB.Cnt .BS 2 +X.Arc.STR.TB.Cnt .BS 2 +X.Arc.BL.TB.Cnt .BS 2 + +X.Arc.STR.Max .BS 1 +X.Arc.STR.Bits .BS 1 +X.Arc.STR.SL.Cnt .BS 2 +X.Arc.STR.LL.Cnt .BS 2 + +X.Arc.TopSize .BS 1 +X.Arc.bScanBL .BS 1 + +X.Arc.BLL.Max .BS 1 +X.Arc.BLL.Bits .BS 1 +X.Arc.BLL.SL.Cnt .BS 2 +X.Arc.BLL.LL.Cnt .BS 2 + +X.Arc.BLO.Max .BS 2 +X.Arc.BLO.Bits .BS 1 + +X.Arc.BLO.LO.cnt .BS 12 +X.Arc.BLO.HI.cnt .BS 12 + +X.Arc.ResetCnt .EQ *-X.Arc.ResetData +*-------------------------------------- +X.Arc.TopCntL .BS 256 +X.Arc.TopCntH .BS 256 +X.Arc.TopCntBLL .BS 256 +X.Arc.TopCntBLH .BS 256 +*-------------------------------------- +MAN +SAVE usr/src/shared/x.arc.s +LOAD usr/src/bin/arc.s +ASM diff --git a/SHARED/X.UNARC.S.txt b/SHARED/X.UNARC.S.txt new file mode 100644 index 00000000..8d4b8265 --- /dev/null +++ b/SHARED/X.UNARC.S.txt @@ -0,0 +1,352 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* ZPInBufPtr = Ptr to Shunk Data +* ZPOutBufPtr = Ptr to Uncompressed Data +*-------------------------------------- +* ZPnCnt = !ZPULen +* ZPPtr1 +* ZPPtr2 +* ZPInMask +* ZPSTRLenBits +* ZPBLLenBits +* ZPBLOfsLBits +* ZPBLOfsHBits +* ZPTOPCnt +*-------------------------------------- +X.UnArc jsr X.UnArc.GetByte ULEN LO + eor #$ff + sta ZPnCnt + + jsr X.UnArc.GetByte ULEN HI + eor #$ff + sta ZPnCnt+1 + + jsr X.UnArc.GetByte TBLBITS LO + sta ZPPtr1 + + jsr X.UnArc.GetByte TBLBITS HI + sta ZPPtr1+1 + ora ZPPtr1 + bne X.UnArc.ARC +*-------------------------------------- +X.UnArc.STORE ldx ZPnCnt !LEN LO + + ldy #0 + +.1 inx + bne .2 + + inc ZPnCnt+1 + beq .8 + +.2 lda (ZPInBufPtr),y + sta (ZPOutBufPtr),y + iny + bne .1 + + inc ZPInBufPtr+1 + inc ZPOutBufPtr+1 + + bra .1 + +.8 clc + rts +*-------------------------------------- +X.UnArc.ARC lda #$80 + sta ZPTOPCnt Default to no TOP bytes... + sta ZPSTRLenBits ...and no long length for STR... + sta ZPBLLenBits ...and BL + sta ZPInMask Init Bit shifter + + lda ZPPtr1+1 + and #%01111111 -llloooo + beq .13 no BL/STR + + lsr + lsr + lsr + lsr + sta ZPBLLenBits lll + + lda ZPPtr1+1 ----oooo + and #%00001111 + + ldx #0 + cmp #8 + bcc .10 + +* sec + sbc #8 + tax + lda #8 + +.10 sta ZPBLOfsLBits + stx ZPBLOfsHBits + + lda ZPPtr1 sss----- + + lsr + lsr + lsr + lsr + lsr + beq .13 + + sta ZPSTRLenBits + +.13 lda ZPPtr1+1 c------- + asl + lda ZPPtr1 ---ccccc + and #%00011111 + rol + beq X.UnArc.ARC.LOOP + + sta ZPTOPCnt + + ldx ZPInBufPtr ZPPtr1 = TOP table + stx ZPPtr1 + ldx ZPInBufPtr+1 + stx ZPPtr1+1 + + clc + adc ZPInBufPtr skip TOP table + sta ZPInBufPtr + bcc X.UnArc.ARC.LOOP + + inc ZPInBufPtr+1 +*-------------------------------------- +X.UnArc.ARC.LOOP + bit ZPSTRLenBits + bpl X.UnArc.ARC.LOOPBL + +.1 jsr X.UnArc.Single + bne .1 + + clc + rts +*-------------------------------------- +X.UnArc.ARC.LOOPBL + jsr X.UnArc.GetBitInC + bcs .60 -> STRBL + + jsr X.UnArc.Single + bne X.UnArc.ARC.LOOPBL + + clc + rts +*-------------------------------------- +* STRBL +*-------------------------------------- +.60 jsr X.UnArc.GetBitInC + bcs .70 -> BL +*-------------------------------------- +* STR +*-------------------------------------- +* bit ZPSTRLenBits +* bmi .63 no long len + + jsr X.UnArc.GetBitInC + bcs .61 -> Long Len + +.63 ldx #ARC.B.SHORTSTR.W + jsr X.UnArc.GetXBitInA + + clc + adc #STR.MIN + bra .62 + +.61 ldx ZPSTRLenBits + jsr X.UnArc.GetXBitInA + + clc + adc #STR.MID + +.62 pha STR len + + jsr X.UnArc.Single + + pla + dec + bne .62 + +.81 bra .80 +*-------------------------------------- +* BL +*-------------------------------------- +.70 bit ZPBLLenBits + bmi .73 no long len + + jsr X.UnArc.GetBitInC + bcs .71 -> Long Len + +.73 ldx #ARC.B.SHORTBLL.W + jsr X.UnArc.GetXBitInA + + clc + adc #BLL.MIN + bra .72 +*-------------------------------------- +.71 ldx ZPBLLenBits + jsr X.UnArc.GetXBitInA + + clc + adc #BLL.MID + +.72 sta ZPPtr2 save BL Len.... + +* BLOFS + pha + + ldy #0 + ldx ZPBLOfsHBits + beq .75 + + jsr X.UnArc.GetXBitInA + + tay + +.75 jsr X.UnArc.Get8BitInA YA=Offset + + clc + adc ZPPtr2 ZPPtr2=BL Len+Offset + sta ZPPtr2 + + tya + adc #0 + sta ZPPtr2+1 + + lda ZPOutBufPtr + sec + sbc ZPPtr2 + sta ZPPtr2 + + lda ZPOutBufPtr+1 + sbc ZPPtr2+1 + sta ZPPtr2+1 + + plx Get Back BL Len + ldy #0 + +.76 lda (ZPPtr2),y + jsr X.UnArc.PutByte + + iny + dex + bne .76 + +.80 lda ZPnCnt + and ZPnCnt+1 + inc + beq .88 + + jmp X.UnArc.ARC.LOOPBL + +.88 clc + rts +*-------------------------------------- +X.UnArc.Single bit ZPTOPCnt + bmi .1 no TOP Table + + jsr X.UnArc.GetBitInC + bcs .3 ->TOP0 +*-------------------------------------- +* RAW +*-------------------------------------- +.1 jsr X.UnArc.Get8BitInA + bra X.UnArc.PutByte +*-------------------------------------- +.3 jsr X.UnArc.GetBitInC + bcs .4 ->TOP8 +*-------------------------------------- +* TOP0/4 +*-------------------------------------- + ldx #ARC.B.TOP0.W-1 + jsr X.UnArc.GetXBitInA + bra .51 +*-------------------------------------- +.4 jsr X.UnArc.GetBitInC + bcs .5 ->TOP16 +*-------------------------------------- +* TOP8 +*-------------------------------------- + ldx #ARC.B.TOP8.W-2 + jsr X.UnArc.GetXBitInA + ora #%1000 + bra .51 +*-------------------------------------- +* TOP16 +*-------------------------------------- +.5 ldx #ARC.B.TOP16.W-2 + jsr X.UnArc.GetXBitInA + ora #%10000 + +.51 tay + lda (ZPPtr1),y +*-------------------------------------- +* fall in PutByte +*-------------------------------------- +X.UnArc.PutByte inc ZPnCnt + bne .1 + + inc ZPnCnt+1 + beq .8 + +.1 sta (ZPOutBufPtr) + + inc ZPOutBufPtr + bne .8 + + inc ZPOutBufPtr+1 + +.8 rts +*-------------------------------------- +X.UnArc.Get8BitInA + ldx #8 +X.UnArc.GetXBitInA + lda #0 + +.1 pha + jsr X.UnArc.GetBitInC + pla + rol + dex + bne .1 + + rts +*-------------------------------------- +X.UnArc.GetBitInC + lda (ZPInBufPtr) + and ZPInMask + + cmp #1 CC if bit=0 + + php + + lsr ZPInMask + bcc .8 + + ror ZPInMask + + jsr X.UnArc.NextByte + +.8 plp + rts +*-------------------------------------- +X.UnArc.GetByte lda (ZPInBufPtr) +X.UnArc.NextByte + inc ZPInBufPtr + bne .8 + + inc ZPInBufPtr+1 + +.8 rts +*-------------------------------------- + .LIST ON +X.UnArc.Size .EQ *-X.UnArc + .LIST OFF +*-------------------------------------- +MAN +SAVE usr/src/shared/x.unarc.s +LOAD usr/src/bin/unarc.s +ASM diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 17243069..7d573efb 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -102,10 +102,10 @@ CORE.Events jsr CORE.GetEvents lda CORE.EvtCount bne .1 *-------------------------------------- -.4 bit OPENAPPLE +.4 bit IO.OPENAPPLE bpl .8 - lda KBD + lda IO.KBD bpl .8 cmp #"0" @@ -114,7 +114,7 @@ CORE.Events jsr CORE.GetEvents cmp #"9"+1 bcs .8 - sta KBDSTROBE + sta IO.KBDSTROBE and #$0F @@ -140,14 +140,14 @@ CORE.Quit php lda IRQ.INTNUM sta K.MLI.PARAMS+1 - >MLICALL MLIDEALLOCIRQ + >MLICALL MLI.DEALLOCIRQ - bit RDIOUDIS - sta SETIOUDIS - sta CLRDHIRES + bit IO.RDIOUDIS + sta IO.SETIOUDIS + sta IO.CLRDHIRES bmi .1 - sta CLRIOUDIS + sta IO.CLRIOUDIS .1 ldx #5 @@ -156,7 +156,7 @@ CORE.Quit php bpl .2 lda #4 - ldx #MLIQUIT + ldx #MLI.QUIT jmp GP.MLICall *-------------------------------------- CORE.UpdPPS tax save RC From INIT or RUN @@ -213,7 +213,7 @@ CORE.GetEvents lda #K.S.EVT dec IRQ.Tick bra .2 -.1 lda VBL get VLINE status +.1 lda IO.VBL get VLINE status tax eor CORE.VBLState bpl .8 no change,no tick @@ -500,7 +500,7 @@ CORE.IRQGS .OP 65816 phk plb - stz IO.IIGS.CLRVBLINT + stz IO.GS.CLRVBLINT jsr CORE.IRQ.Switch diff --git a/SYS/KERNEL.S.CTRL.txt b/SYS/KERNEL.S.CTRL.txt index 17a8bd9f..fad7448c 100644 --- a/SYS/KERNEL.S.CTRL.txt +++ b/SYS/KERNEL.S.CTRL.txt @@ -4,11 +4,11 @@ NEW * CONTROL SECTION : .LIST ON *-------------------------------------- -C1 .EQ MAIN.S -C2 .EQ AUX.S -C3 .EQ D1.S -C4 .EQ D2.S -C5 .EQ E0.S +*C1 .EQ MAIN.S +*C2 .EQ AUX.S +*C3 .EQ D1.S +*C4 .EQ D2.S +*C5 .EQ E0.S *-------------------------------------- .LIST OFF .DO MAIN.S>$BC0 diff --git a/SYS/KERNEL.S.DIRENT.txt b/SYS/KERNEL.S.DIRENT.txt index f4cd26dd..fcc632c1 100644 --- a/SYS/KERNEL.S.DIRENT.txt +++ b/SYS/KERNEL.S.DIRENT.txt @@ -73,7 +73,7 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ? >STYA K.MLI.PARAMS+2 >STYA ZPPtr2 - >MLICALL MLIONLINE + >MLICALL MLI.ONLINE bcs DIRENT.RTS >LDYAI 16+S.STAT*18+1 14*(Vols+Stat) + 4*(PFT+Stat) + \0 @@ -124,7 +124,7 @@ K.ReadDir.ROOT ldy #S.FD.DIR.FC did we already returned something ? >LDYAI K.MLI.PATH >STYA K.MLI.PARAMS+1 - >MLICALL MLIGETFILEINFO + >MLICALL MLI.GFINFO sta K.S.STAT+S.STAT.P.DEVSTATUS bcs .3 @@ -190,7 +190,7 @@ K.ReadDir.DIR sta K.MLI.PARAMS+1 A=#S.DIR.PRODOS.REF lda /512 sta K.MLI.PARAMS+5 - >MLICALL MLIREAD Read A block from directory + >MLICALL MLI.READ Read A block from directory bcs .99 ldy #S.FD.DIR.EL Check if first run.... diff --git a/SYS/KERNEL.S.DRV.txt b/SYS/KERNEL.S.DRV.txt index fe2fcd87..8e47f05b 100644 --- a/SYS/KERNEL.S.DRV.txt +++ b/SYS/KERNEL.S.DRV.txt @@ -136,7 +136,7 @@ DRV.GBLK txa lda (pFD),y sta .3+2 - jsr GO.ProDOS + jsr GO.MainIC ldx #5 @@ -147,7 +147,7 @@ DRV.GBLK txa .3 jsr $ffff SELF MODIFIED - jsr GO.A2osX + jsr GO.AuxLC rts DRV.BLK.P .BS 6 @@ -176,13 +176,13 @@ DRV.SP >STYA pIOCTL lda (pFD),y sta .1+2 - jsr GO.ProDOS Remapped SP + jsr GO.MainIC Remapped SP .1 jsr $ffff .2 .BS 1 .3 .BS 2 - jsr GO.A2osX + jsr GO.AuxLC rts DRV.SP.Cnt .HS 03030301030101010404 diff --git a/SYS/KERNEL.S.ENVX.txt b/SYS/KERNEL.S.ENVX.txt index cee58422..4b62d86e 100644 --- a/SYS/KERNEL.S.ENVX.txt +++ b/SYS/KERNEL.S.ENVX.txt @@ -106,10 +106,10 @@ ENVX.SetEnv.I pla sta ENVX.hEnv - sta CLRWRITEAUX + sta IO.CLRWRITEAUX ldy #S.PS.hENV sta (pPS),y - sta SETWRITEAUX + sta IO.SETWRITEAUX bra .1 Start over .22 ldy #$ff diff --git a/SYS/KERNEL.S.ERROR.txt b/SYS/KERNEL.S.ERROR.txt index b09dcdcb..95705eb5 100644 --- a/SYS/KERNEL.S.ERROR.txt +++ b/SYS/KERNEL.S.ERROR.txt @@ -8,12 +8,12 @@ NEW K.GetErrMsg >PULLW ZPPtr2 Dst Buf >PULLA Err Code - sta SETREADAUX - sta SETWRITEAUX + sta IO.SETREADAUX + sta IO.SETWRITEAUX jsr ERRORX.GetErrMsg - sta CLRREADAUX + sta IO.CLRREADAUX rts *-------------------------------------- MAN diff --git a/SYS/KERNEL.S.ERRORX.txt b/SYS/KERNEL.S.ERRORX.txt index 945373ac..27841376 100644 --- a/SYS/KERNEL.S.ERRORX.txt +++ b/SYS/KERNEL.S.ERRORX.txt @@ -32,7 +32,7 @@ ERRORX.GetErrMsg .4 ldy #$ff - sta CLRWRITEAUX + sta IO.CLRWRITEAUX .5 iny lda (ZPPtr1),y diff --git a/SYS/KERNEL.S.FS.txt b/SYS/KERNEL.S.FS.txt index a253b67a..6978fd19 100644 --- a/SYS/KERNEL.S.FS.txt +++ b/SYS/KERNEL.S.FS.txt @@ -1,7 +1,7 @@ NEW AUTO 3,1 *-------------------------------------- -FS.OPEN.REG >MLICALL MLIGETFILEINFO +FS.OPEN.REG >MLICALL MLI.GFINFO bcs .10 lda IO.Open.TYPE Already Exists @@ -45,13 +45,13 @@ FS.OPEN.REG >MLICALL MLIGETFILEINFO stz K.MLI.PARAMS+2 stz K.MLI.PARAMS+3 stz K.MLI.PARAMS+4 - >MLICALL MLISETEOF no, reset size to 0 + >MLICALL MLI.SETEOF no, reset size to 0 bra .4 -.3 >MLICALL MLIGETEOF +.3 >MLICALL MLI.GETEOF bcs FS.OPEN.ERR - >MLICALL MLISETMARK + >MLICALL MLI.SETMARK .4 bcs FS.OPEN.ERR .5 lda IO.Open.FLAGS @@ -62,7 +62,7 @@ FS.OPEN.REG >MLICALL MLIGETFILEINFO sta K.MLI.PARAMS+2 lda #C.CR sta K.MLI.PARAMS+3 - >MLICALL MLINEWLINE + >MLICALL MLI.NEWLINE bcs FS.OPEN.ERR .8 lda IO.hFD @@ -83,7 +83,7 @@ FS.OPEN.DIR lda #S.FD.T.DIR lda K.MLI.PATH+2 beq .8 "/" - >MLICALL MLIGETFILEINFO + >MLICALL MLI.GFINFO bcs .9 lda K.MLI.PARAMS+S.FI.T @@ -101,10 +101,10 @@ FS.OPEN.DIR lda #S.FD.T.DIR sec .9 rts *-------------------------------------- -FS.READ.REG ldx #MLIREAD +FS.READ.REG ldx #MLI.READ .HS 2C BIT ABS *-------------------------------------- -FS.WRITE.REG ldx #MLIWRITE +FS.WRITE.REG ldx #MLI.WRITE ldy #S.FD.REG.REF lda (pFD),y @@ -122,7 +122,7 @@ FS.WRITE.REG ldx #MLIWRITE rts *-------------------------------------- -FS.EOF.REG >MLICALL MLIGETMARK +FS.EOF.REG >MLICALL MLI.GETMARK bcs .9 ldy #2 @@ -132,7 +132,7 @@ FS.EOF.REG >MLICALL MLIGETMARK dey bpl .1 - >MLICALL MLIGETEOF + >MLICALL MLI.GETEOF bcs .9 ldy #2 @@ -160,14 +160,14 @@ FS.CLOSE jsr FS.MLICLOSE FS.MLICREATE sta K.MLI.PARAMS+7 Storage Type ldx #3 -.1 lda DATELO,x +.1 lda GP.DATE,x sta K.MLI.PARAMS+8,x Create Date/Time dex bpl .1 lda #S.FI.A.FULL sta K.MLI.PARAMS+3 Access - >MLICALL MLICREATE + >MLICALL MLI.CREATE rts *-------------------------------------- FS.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF @@ -180,7 +180,7 @@ FS.MLIOPEN >LDYAI 1024 get a ProDOS IOBUF ldy #S.FD.REG.IOBUF sta (pFD),y - >MLICALL MLIOPEN + >MLICALL MLI.OPEN bcs FS.RTS lda K.MLI.PARAMS+5 get ref_num @@ -198,7 +198,7 @@ FS.MLICLOSE ldy #S.FD.REG.REF beq .1 sta K.MLI.PARAMS+1 - >MLICALL MLICLOSE + >MLICALL MLI.CLOSE bcs FS.RTS .1 ldy #S.FD.REG.IOBUF @@ -213,7 +213,7 @@ FS.MLICLOSE ldy #S.FD.REG.REF FS.Stat bit A2osX.FSID bmi FS.Stat.FX -FS.Stat.203 >MLICALL MLIGETFILEINFO +FS.Stat.203 >MLICALL MLI.GFINFO bcs FS.RTS jsr FS.ClrStat @@ -245,7 +245,7 @@ FS.Stat.203 >MLICALL MLIGETFILEINFO ldx #K.S.STAT+S.STAT.MTIME jmp FS.PTime2StatYAX *-------------------------------------- -FS.Stat.FX >MLICALL MLIGETFILEINFOEX +FS.Stat.FX >MLICALL MLI.GFINFOEX bcc .1 cmp #MLI.E.BADCALL diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 3909d4ac..ac336695 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -65,6 +65,7 @@ GP.Sleep php inc Advance one byte because of return by RTI bne GP.Sleep2 + inx GP.Sleep2 ldy #S.PS.PC @@ -181,13 +182,13 @@ GP.AtkCall dec IRQ.InKernel >STYA .1 - jsr GO.ProDOS + jsr GO.MainIC jsr MLI - .DA #MLIATALK + .DA #MLI.ATALK .1 .DA * - jsr GO.A2osX + jsr GO.AuxLC inc IRQ.InKernel rts @@ -268,14 +269,14 @@ GP.GetFAC jsr GP.ROMCALL GP.RomCall phx ldx $D000 stx .8+1 - bit RROMBNK1 + bit IO.RROMBNK1 plx jsr MATHF .8 ldx #$ff bit $C000,x - bit $C000,x +* bit $C000,x rts *-------------------------------------- GP.SetARG ldx #FPU.SETARG @@ -338,22 +339,23 @@ GP.lrintf jsr GP.SetFAC *-------------------------------------- GP.MLICall stx .1 sta K.MLI.PARAMS - jsr GO.ProDOS + jsr GO.MainIC jsr MLI .1 .BS 1 .DA K.MLI.PARAMS - jsr GO.A2osX + jsr GO.AuxLC rts *-------------------------------------- -GO.ProDOS pha +GO.MainIC pha lda $D000 We re coming from AUXLC, saving bank... - sta GO.A2osX.BNK+1 + sta GO.AuxLC.BNK+1 pla php clc - .HS 2C bit abs -GO.A2osX php + .HS 2C BIT ABS +GO.AuxLC php sec + sei sta GO.EXIT.SaveA+1 stx GO.EXIT.SaveX+1 @@ -363,36 +365,40 @@ GO.A2osX php ply inx bne .1 + iny + .1 stx GO.EXIT.JMP+1 sty GO.EXIT.JMP+2 - bcs GO.A2osX.BNK if CS, go AUXLC - bit RRAMWRAMBNK1 Go MAINLC (ProDOS), always BNK1 -* bit RRAMWRAMBNK1 + bcs .2 if CS, go AUXLC tsx stx SaveSX ldx SaveSM txs - sta CLRALTZP + sta IO.CLRALTZP + + ldx #IO.RRAMWRAMBNK1 Go MAINLC (ProDOS), always BNK1 bra GO.EXIT -GO.A2osX.BNK ldx #RRAMWRAMBNK1 Self Modified, initialized to BNK1 for INIT3 - - bit $C000,x -* bit $C000,x - sta SETALTZP +.2 sta IO.SETALTZP tsx stx SaveSM ldx SaveSX txs + +GO.AuxLC.BNK ldx #$FF Self Modified, initialized to BNK1 for INIT3 *-------------------------------------- -GO.EXIT pha push P on stack +GO.EXIT bit $C000,x Select Proper LC bank +* bit $C000,x + + pha push P on stack GO.EXIT.SaveY ldy #$ff GO.EXIT.SaveX ldx #$ff GO.EXIT.SaveA lda #$ff plp + GO.EXIT.JMP jmp $FFFF SELF MODIFIED *-------------------------------------- * Called from ProDOS IRQ Manager (LCBNK1) @@ -407,7 +413,7 @@ GP.IRQ cld bit IRQ.Skip After A2osX IRQ.H ? bmi GP.IRQ.Exit - sta SETALTZP switch to aux LC + sta IO.SETALTZP switch to aux LC tsx stx SaveSM ldx SaveSX @@ -419,17 +425,22 @@ GP.IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED stx SaveSX ldx SaveSM txs - sta CLRALTZP + sta IO.CLRALTZP + rts GP.IRQ.Exit stz IRQ.Skip reset flag sec rts *-------------------------------------- -*GO.Reset jsr GO.A2osX +*GO.Reset jsr GO.AuxLC * jmp CORE.Run *-------------------------------------- *BrkHandler bra * +*-------------------------------------- + .LIST ON + .BS $11D0-* + .LIST OFF *-------------------------------------- * $11D0->$11EF : Public Variables *-------------------------------------- diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 7cc31d44..b867f39f 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -4,7 +4,7 @@ NEW Kernel.Init2 sei ldx #$FF txs - sta SETALTZP + sta IO.SETALTZP stx SaveSM stx SaveSX @@ -16,7 +16,7 @@ Kernel.Init2 sei dex bpl .1 - sta CLRALTZP + sta IO.CLRALTZP >LDYAI MSG.Init2 jsr PrintFYA @@ -44,7 +44,7 @@ Kernel.Init2 sei ldy #0 - sta SETWRITEAUX + sta IO.SETWRITEAUX .2 inx bne .3 @@ -64,20 +64,20 @@ Kernel.Init2 sei inc ZPPtr2+1 bra .2 -.4 sta CLRWRITEAUX +.4 sta IO.CLRWRITEAUX - sta SETALTZP + sta IO.SETALTZP - lda RRAMWRAMBNK2 - lda RRAMWRAMBNK2 + lda IO.RRAMWRAMBNK2 + lda IO.RRAMWRAMBNK2 >LDYA PAKME.D2 >STYA ZPInBufPtr >LDYAI $D000 jsr A2osX.Unpak - lda RRAMWRAMBNK1 - lda RRAMWRAMBNK1 + lda IO.RRAMWRAMBNK1 + lda IO.RRAMWRAMBNK1 >LDYA PAKME.D1 >STYA ZPInBufPtr @@ -89,9 +89,9 @@ Kernel.Init2 sei >LDYAI $E000 jsr A2osX.Unpak - lda RROMBNK1 + lda IO.RROMBNK1 - sta CLRALTZP + sta IO.CLRALTZP cli jsr KConfigLoad @@ -105,9 +105,9 @@ Kernel.Init2 sei *-------------------------------------- >DEBUGOA *-------------------------------------- -Kernel.Init3 sta SETALTZP - lda RRAMWRAMBNK1 - lda RRAMWRAMBNK1 +Kernel.Init3 sta IO.SETALTZP + lda IO.RRAMWRAMBNK1 + lda IO.RRAMWRAMBNK1 lda #$ff Make sure we are in Kernel Mode during setup sta IRQ.InKernel @@ -118,19 +118,19 @@ Kernel.Init3 sta SETALTZP lda #K.VER sta A2osX.KVER+1 - sta SETALTCHAR - sta SETMIXED - sta CLRHIRES - sta SET80DISP - sta SET80STORE - sta CLRPAGE2 + sta IO.SETALTCHAR + sta IO.SETMIXED + sta IO.CLRHIRES + sta IO.SET80DISP + sta IO.SET80STORE + sta IO.CLRPAGE2 - lda RDIOUDIS - sta SETIOUDIS - sta SETDHIRES + lda IO.RDIOUDIS + sta IO.SETIOUDIS + sta IO.SETDHIRES bmi .10 - sta CLRIOUDIS + sta IO.CLRIOUDIS .10 jsr MemMgrInit @@ -149,7 +149,7 @@ Kernel.Init3 sta SETALTZP jsr SysCDEVInit bcs * -* sta CLRMIXED +* sta IO.CLRMIXED >PUSHWI DEV.CONSOLE >PUSHBI O.RDWR @@ -215,8 +215,8 @@ Kernel.Init3.Err KConfigLoad >LDYAI MSG.KCREAD jsr PrintFYA - jsr MLIENTRY Bypass ATALK - .DA #MLIGETFILEINFOEX + jsr GP.MLIENTRY Bypass ATALK + .DA #MLI.GFINFOEX .DA pMLIGFIEX bcc .1 eor #MLI.E.BADCALL @@ -229,7 +229,7 @@ KConfigLoad >LDYAI MSG.KCREAD ror A2osX.FSID File Present & ProDOS.FX detected .2 jsr MLI - .DA #MLIOPEN + .DA #MLI.OPEN .DA pMLIOPEN bcs .9 @@ -237,12 +237,12 @@ KConfigLoad >LDYAI MSG.KCREAD sta pMLIREAD+1 sta pMLICLOSE+1 jsr MLI - .DA #MLIREAD + .DA #MLI.READ .DA pMLIREAD php pha jsr MLI - .DA #MLICLOSE + .DA #MLI.CLOSE .DA pMLICLOSE pla plp @@ -271,13 +271,13 @@ MemMgrInit >LDYAI Mem.MHiMem >STYA Mem.LoMem stz Mem.LastSlot Reserve Slot #0 - sta SETWRITEAUX + sta IO.SETWRITEAUX >LDYAI Mem.XLoMem >STYA Mem.LoMem stz Mem.LastSlot Reserve Slot #0 - sta CLRWRITEAUX + sta IO.CLRWRITEAUX ldx #K.FILE.MAX-1 @@ -367,7 +367,7 @@ SysCDEVInit.TTYPtrs sta FD.TTY+S.FD.DEV.DCBPTR+1 sta ZPPtr1+1 - sta SETWRITEAUX + sta IO.SETWRITEAUX >STYA Mem.HiMem >STYA Mem.Free @@ -383,7 +383,7 @@ SysCDEVInit.TTYPtrs lda FD.TTY+S.FD.DEV.DEVID sta (ZPPtr1) - sta CLRWRITEAUX + sta IO.CLRWRITEAUX rts *-------------------------------------- @@ -394,13 +394,13 @@ HW.Detect >PUSHWI MSG.HW >PUSHBI 0 >SYSCALL2 printf - bit RROMBNK1 + bit IO.RROMBNK1 stz A2osX.HWType stz A2osX.HWSubT sec - jsr $FE1F IIgs ? + jsr $FE1F ROM.IDROUTINE IIgs ? bcs .2 lda #A2osX.HWType.IIgs @@ -414,7 +414,7 @@ HW.Detect >PUSHWI MSG.HW .1 sty A2osX.HWSubT bra .8 -.2 lda $FBC0 +.2 lda $FBC0 ROM.ZIDBYTE beq .4 //c ldx #A2osX.HWType.IIe @@ -435,8 +435,8 @@ HW.Detect >PUSHWI MSG.HW lda $FBBF sta A2osX.HWSubT -.8 bit RRAMWRAMBNK1 - bit RRAMWRAMBNK1 +.8 bit IO.RRAMWRAMBNK1 + bit IO.RRAMWRAMBNK1 >PUSHWI MSG.HW.TypeSubT >PUSHB A2osX.HWType @@ -477,10 +477,10 @@ CPU.Init >PUSHWI MSG.CPU *-------------------------------------- ldx A2osX.HZ -.1 bit VBL //e : Wait VBL high.... +.1 bit IO.VBL //e : Wait VBL high.... bpl .1 -.2 lda VBL //e : wait VBL low +.2 lda IO.VBL //e : wait VBL low bmi .2 .3 pha (3) @@ -499,17 +499,17 @@ CPU.Init >PUSHWI MSG.CPU .5 pla - eor VBL + eor IO.VBL bpl .3 - lda VBL + lda IO.VBL bmi .3 bra CPU.InitOK *-------------------------------------- -CPU.Init2c lda RDIOUDIS +CPU.Init2c lda IO.RDIOUDIS pha - sta CLRIOUDIS + sta IO.CLRIOUDIS lda IO.IIC.RDVBLMSK pha Save VBLIRQ enable @@ -517,7 +517,7 @@ CPU.Init2c lda RDIOUDIS lda IO.IIC.CLRVBLIRQ -.1 bit VBL Wait VBL high.... +.1 bit IO.VBL Wait VBL high.... bpl .1 bit IO.IIC.CLRVBLIRQ clear //c IRQ @@ -539,7 +539,7 @@ CPU.Init2c lda RDIOUDIS inc A2osX.CPUSPEED+1 ldy #0 -.5 bit VBL Wait VBL high.... +.5 bit IO.VBL Wait VBL high.... bpl .3 bit IO.IIC.CLRVBLIRQ clear //c IRQ @@ -552,7 +552,7 @@ CPU.Init2c lda RDIOUDIS .8 pla bpl CPU.InitOk - sta SETIOUDIS + sta IO.SETIOUDIS *-------------------------------------- CPU.InitOk plp @@ -688,11 +688,11 @@ DevMgrInit >LDYAI MSG.DEV jsr DevMgr.VXD - lda DEVCNT + lda GP.DEVCNT sta .1+1 .1 ldx #$ff SELF MODIFIED - lda DEVLST,x + lda GP.DEVLST,x and #$F0 asl php Save Drive 1/2 in C @@ -709,9 +709,9 @@ DevMgrInit >LDYAI MSG.DEV ora #$30 sta FD.BDEV.NAME+1 SnDy - lda DEVPTRS,x + lda GP.DEVPTRS,x sta FD.BDEV+S.FD.DEV.BUSPTR - lda DEVPTRS+1,x + lda GP.DEVPTRS+1,x sta FD.BDEV+S.FD.DEV.BUSPTR+1 sta ZPPtr1+1 @@ -857,13 +857,13 @@ DevMgr.VXD >LDYAI VSD.PATCH php sei - bit RRAMWRAMBNK2 - bit RRAMWRAMBNK2 - sta CLRALTZP + bit IO.RRAMWRAMBNK2 + bit IO.RRAMWRAMBNK2 + sta IO.CLRALTZP .81 ldx $FFFF SELF MODIFIED : Slot0n - sta SETALTZP - bit RRAMWRAMBNK1 - bit RRAMWRAMBNK1 + sta IO.SETALTZP + bit IO.RRAMWRAMBNK1 + bit IO.RRAMWRAMBNK1 lda #A2osX.S.VXD sta A2osX.S,x @@ -889,14 +889,14 @@ DevMgr.VXD >LDYAI VSD.PATCH .19 sec rts *-------------------------------------- -VSD.PATCH bit RRAMWRAMBNK2 +VSD.PATCH bit IO.RRAMWRAMBNK2 jsr $D002 - bit RRAMWRAMBNK1 + bit IO.RRAMWRAMBNK1 rts *-------------------------------------- -VED.PATCH bit RRAMWRAMBNK2 +VED.PATCH bit IO.RRAMWRAMBNK2 jsr $D401 - bit RRAMWRAMBNK1 + bit IO.RRAMWRAMBNK1 rts *-------------------------------------- * Setup AuxLC $FFFE->Kernel IRQ Handler @@ -915,7 +915,7 @@ IrqMgrInit >LDYAI MSG.IRQ >LDYAI GP.IRQ >STYA K.MLI.PARAMS+2 - >MLICALL MLIALLOCIRQ + >MLICALL MLI.ALLOCIRQ bcs .9 lda K.MLI.PARAMS+1 @@ -992,7 +992,7 @@ IrqMgrInit >LDYAI MSG.IRQ sec bra IrqMgrInit.8 -.2 sta CLRPAGE2 +.2 sta IO.CLRPAGE2 lda #$60 sta $5fa //c EXTINT COM1:Dont buffer but get IRQ sta $5fb //c EXTINT COM2:Dont buffer but get IRQ @@ -1128,7 +1128,7 @@ IrqMgr.Mouse stz ZPPtr1 Try finding a Mouse Card... sta IRQ.n0 - bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly + bit IO.RROMBNK2 Renable ROM to allow MOUSE II firmware works properly ldy #INITMOUSE jsr .10 @@ -1138,8 +1138,8 @@ IrqMgr.Mouse stz ZPPtr1 Try finding a Mouse Card... lda #MOUSEMODx.INTVBL+MOUSEMODx.ACTIVE jsr .10 - bit RRAMWRAMBNK1 Back To LC Ram - bit RRAMWRAMBNK1 + bit IO.RRAMWRAMBNK1 Back To LC Ram + bit IO.RRAMWRAMBNK1 ldy #SERVEMOUSE lda (ZPPtr1),y sta CORE.IRQM+1 @@ -1202,11 +1202,11 @@ TskMgrInit >LDYAI MSG.TSK ldy #S.PS.hENV sta (pPS),y - sta SETWRITEAUX + sta IO.SETWRITEAUX lda #0 sta (ZPPtr1) make sure blank!! - sta CLRWRITEAUX + sta IO.CLRWRITEAUX >PUSHWZ >PUSHWZ diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index bb48bb35..1b128c94 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -4,7 +4,7 @@ NEW * called directly by IRQ Vector $FFFE in AuxLC * Must keep: * A,X,Y -* SETREADAUX +* IO.SETREADAUX * if we are here, Aux ZP/Stack already On * Exit with RTI * if A2osX Drivers cannot clear IRQ, @@ -26,29 +26,29 @@ IRQ.Handler cld stx IRQ.5+1 sty IRQ.4+1 - lda RD80STORE - and RDPAGE2 + lda IO.RD80STORE + and IO.RDPAGE2 pha - sta CLRPAGE2 + sta IO.CLRPAGE2 - lda RDREADAUX + lda IO.RDREADAUX pha - sta CLRREADAUX Make sure we can access FD.Table + sta IO.CLRREADAUX Make sure we can access FD.Table - lda RDWRITEAUX + lda IO.RDWRITEAUX pha - sta CLRWRITEAUX Driver may R/W in screen holes + sta IO.CLRWRITEAUX Driver may R/W in screen holes lda MSLOT Save MSLOT sta IRQ.2+2 -* lda RDCXROM C100-C7ff state +* lda IO.RDCXROM C100-C7ff state * pha -* sta CLRCXROM Enable access to slot C100-C7ff space +* sta IO.CLRCXROM Enable access to slot C100-C7ff space IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED -* ldx #CLRCXROM +* ldx #IO.CLRCXROM * pla Get CXROM State * bpl .3 @@ -64,26 +64,26 @@ IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED eor #$C0 ....mmm...not looking like Cn.... bne IRQ.3 - sta CLRC8ROM Release $C800 + sta IO.CLRC8ROM Release $C800 IRQ.2 lda $ff00 SELF MODIFIED IRQ.3 pla Must keep Carry bpl .1 - sta SETWRITEAUX + sta IO.SETWRITEAUX clv coming for AUX.....cancel switch .1 pla bpl .2 - sta SETREADAUX + sta IO.SETREADAUX clv coming for AUX.....cancel switch .2 pla bpl .3 - sta SETPAGE2 + sta IO.SETPAGE2 .3 bvc IRQ.4 if not V, skip task switching diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index d5f8c84e..a7f7026d 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -158,195 +158,195 @@ K.SYSCALL .DA 0 $00 : STAT .DA K.FreeMem K.FreeStkObj *-------------------------------------- * LO Byte : -* #RRAMWRAMBNK1,#RRAMWRAMBNK2 +* #IO.RRAMWRAMBNK1,#IO.RRAMWRAMBNK2 * HI Byte : * Flags (ROOT....) *-------------------------------------- -K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 +K.SYSCALL.BANK .DA #IO.RRAMWRAMBNK1 $00 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 $10 + .DA #IO.RRAMWRAMBNK1 $10 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 $20 : STDIO + .DA #IO.RRAMWRAMBNK1 $20 : STDIO .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 $30 + .DA #IO.RRAMWRAMBNK1 $30 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 $40 + .DA #IO.RRAMWRAMBNK1 $40 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 $50 + .DA #IO.RRAMWRAMBNK1 $50 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 $58 : PRODOS + .DA #IO.RRAMWRAMBNK1 $58 : PRODOS .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 *-------------------------------------- - .DA #RRAMWRAMBNK2 $60 : MOUNT + .DA #IO.RRAMWRAMBNK2 $60 : MOUNT .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 $64 : STKOBJ + .DA #IO.RRAMWRAMBNK2 $64 : STKOBJ .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 $68 : ARG + .DA #IO.RRAMWRAMBNK2 $68 : ARG .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 $70 : STDLIB + .DA #IO.RRAMWRAMBNK2 $70 : STDLIB .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 $80 : STRING + .DA #IO.RRAMWRAMBNK2 $80 : STRING .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK1 $90 : DEV + .DA #IO.RRAMWRAMBNK1 $90 : DEV .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .DA #0 - .DA #RRAMWRAMBNK2 $98 : BIN + .DA #IO.RRAMWRAMBNK2 $98 : BIN .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 $A0 : PS + .DA #IO.RRAMWRAMBNK2 $A0 : PS .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .DA #0 .DA #0 $B0 : STRV @@ -440,26 +440,26 @@ K.SYSCALL.BANK .DA #RRAMWRAMBNK1 $00 K.SYSCALL2 bit K.SYSCALL.BANK,x Get Target BNK bvc K.SYSCALL2.BANK -K.SYSCALL2.AUX sta SETREADAUX MAIN to AUX Mem API - sta SETWRITEAUX +K.SYSCALL2.AUX sta IO.SETREADAUX MAIN to AUX Mem API + sta IO.SETWRITEAUX jsr K.SYSCALL.JMP - sta CLRREADAUX - sta CLRWRITEAUX + sta IO.CLRREADAUX + sta IO.CLRWRITEAUX rts -K.SYSCALL2.MAIN sta CLRREADAUX Coming from KERNEL in AUX... - sta CLRWRITEAUX +K.SYSCALL2.MAIN sta IO.CLRREADAUX Coming from KERNEL in AUX... + sta IO.CLRWRITEAUX jsr .1 - sta SETREADAUX - sta SETWRITEAUX + sta IO.SETREADAUX + sta IO.SETWRITEAUX rts .1 bit K.SYSCALL.BANK,x Get Target LC BNK K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change sta .7+1 - lda $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2 + lda $D000 #IO.RRAMWRAMBNK1 or #IO.RRAMWRAMBNK2 cmp K.SYSCALL.BANK,x beq .7 @@ -468,14 +468,14 @@ K.SYSCALL2.BANK bpl K.SYSCALL.JMP 0, E000, no BNK change lda K.SYSCALL.BANK,x tax get Target BNK in x bit $C000,x switch to Target BNK - bit $C000,x +* bit $C000,x jsr .6 stx .5+1 Save X plx get back Source BNK bit $C000,x switch to Target BNK - bit $C000,x +* bit $C000,x .5 ldx #$ff SELF MODIFIED rts @@ -498,11 +498,11 @@ K.SYSCALL.JMPX2 clc JMPXA >PULLA -K.SYSCALL.JMPX sta SETREADAUX - sta SETWRITEAUX +K.SYSCALL.JMPX sta IO.SETREADAUX + sta IO.SETWRITEAUX jsr JMPX - sta CLRREADAUX - sta CLRWRITEAUX + sta IO.CLRREADAUX + sta IO.CLRWRITEAUX rts *-------------------------------------- MAN diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index b3886795..15d5e839 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -54,9 +54,9 @@ K.Realloc >PULLA >STYA A4L Save MAIN Ptr lda .7+1 - sta SETREADAUX + sta IO.SETREADAUX jsr MEM.SetA1A2 Setup AUX base & End Ptrs - sta CLRREADAUX + sta IO.CLRREADAUX clc Aux To Main jsr XMov @@ -221,10 +221,10 @@ MEM.GetMem.YAX stx MEM.ReqFlags ldy #S.MEM.REFCNT sta (ZPMemMgrSPtr),y - lda RDREADAUX + lda IO.RDREADAUX pha - sta CLRREADAUX + sta IO.CLRREADAUX ldy #S.PS.PID lda (pPS),y @@ -235,7 +235,7 @@ MEM.GetMem.YAX stx MEM.ReqFlags pla bpl .80 - sta SETREADAUX + sta IO.SETREADAUX .80 clc @@ -535,11 +535,11 @@ Mem.IncRefCnt ldy #S.MEM.REFCNT * (X,Y unmodified) *\-------------------------------------- *-------------------------------------- -MEM.DupX sta SETREADAUX - sta SETWRITEAUX +MEM.DupX sta IO.SETREADAUX + sta IO.SETWRITEAUX jsr MEM.Dup - sta CLRREADAUX - sta CLRWRITEAUX + sta IO.CLRREADAUX + sta IO.CLRWRITEAUX rts *-------------------------------------- MEM.Dup jsr K.GetMemPtr @@ -589,8 +589,8 @@ MEM.MoveToMain sec stx .2+1 Save AUX hMem >STYA A2L Save LEN to copy/move - sta CLRREADAUX Make sure MAIN !!!! - sta CLRWRITEAUX + sta IO.CLRREADAUX Make sure MAIN !!!! + sta IO.CLRWRITEAUX jsr K.GetMem bcs MEM.Dup.RTS @@ -598,9 +598,9 @@ MEM.MoveToMain sec >STYA A4L Save MAIN Ptr lda .2+1 Get AUX mem Ptr - sta SETREADAUX + sta IO.SETREADAUX jsr MEM.SetA1A2 Setup AUX base & End Ptrs - sta CLRREADAUX + sta IO.CLRREADAUX clc Aux To Main jsr XMov diff --git a/SYS/KERNEL.S.PIPE.txt b/SYS/KERNEL.S.PIPE.txt index 1135e626..590ab83b 100644 --- a/SYS/KERNEL.S.PIPE.txt +++ b/SYS/KERNEL.S.PIPE.txt @@ -74,7 +74,7 @@ PIPE.WRITE ldy #S.FD.PIPE.S lda (pFD),y tay - sta SETWRITEAUX + sta IO.SETWRITEAUX .1 inx bne .2 @@ -109,7 +109,7 @@ PIPE.WRITE ldy #S.FD.PIPE.S sta PIPE.DSTBUF+1 bra .1 -.8 sta CLRWRITEAUX +.8 sta IO.CLRWRITEAUX tya ldy #S.FD.PIPE.Head @@ -181,7 +181,7 @@ PIPE.READ ldy #S.FD.PIPE.Used+1 lda (pFD),y tay - sta SETREADAUX + sta IO.SETREADAUX .1 inx bne .2 @@ -216,7 +216,7 @@ PIPE.READ ldy #S.FD.PIPE.Used+1 sta PIPE.SRCBUF+1 Restore Pipe Buf base bra .1 -.8 sta CLRREADAUX +.8 sta IO.CLRREADAUX tya ldy #S.FD.PIPE.Tail diff --git a/SYS/KERNEL.S.PRODOS.txt b/SYS/KERNEL.S.PRODOS.txt index a047a9b2..ee9cbd5f 100644 --- a/SYS/KERNEL.S.PRODOS.txt +++ b/SYS/KERNEL.S.PRODOS.txt @@ -13,7 +13,7 @@ NEW *\-------------------------------------- K.Online >PULLW K.MLI.PARAMS+2 >PULLB K.MLI.PARAMS+1 - >MLICALL MLIONLINE + >MLICALL MLI.ONLINE rts */-------------------------------------- * # ChTyp @@ -29,7 +29,7 @@ K.Online >PULLW K.MLI.PARAMS+2 K.ChTyp jsr PFT.CheckPath1 bcs PRODOS.RET3 - >MLICALL MLIGETFILEINFO + >MLICALL MLI.GFINFO bcs PRODOS.RET3 >PULLB K.MLI.PARAMS+S.FI.T @@ -48,7 +48,7 @@ K.ChTyp jsr PFT.CheckPath1 K.ChAux jsr PFT.CheckPath2 bcs PRODOS.RET4 - >MLICALL MLIGETFILEINFO + >MLICALL MLI.GFINFO bcs PRODOS.RET4 >PULLW K.MLI.PARAMS+S.FI.AUXTYPE @@ -67,12 +67,12 @@ K.ChAux jsr PFT.CheckPath2 K.SetAttr jsr PFT.CheckPath1 bcs PRODOS.RET3 - >MLICALL MLIGETFILEINFO + >MLICALL MLI.GFINFO bcs PRODOS.RET3 >PULLB K.MLI.PARAMS+S.FI.A -PRODOS.SFIRET2 >MLICALL MLISETFILEINFO +PRODOS.SFIRET2 >MLICALL MLI.SFINFO bra PRODOS.RET2 PRODOS.RET4 inc pStack diff --git a/SYS/KERNEL.S.PS.txt b/SYS/KERNEL.S.PS.txt index 4ac3cdb1..6b5d4089 100644 --- a/SYS/KERNEL.S.PS.txt +++ b/SYS/KERNEL.S.PS.txt @@ -292,9 +292,9 @@ PS.CreateChild ldx #0 ldy #S.PS.hENV sta (PS.NewPSPtr),y - sta SETWRITEAUX + sta IO.SETWRITEAUX jsr Mem.SetOwner Set Ownership - sta CLRWRITEAUX + sta IO.CLRWRITEAUX ldy #S.PS.hStdIn @@ -1055,11 +1055,11 @@ K.GetMemStat >STYA ZPPtr1 dex bpl .1 - sta SETREADAUX + sta IO.SETREADAUX jsr .2 - sta CLRREADAUX + sta IO.CLRREADAUX .2 ldx #7 diff --git a/SYS/KERNEL.S.PWDX.txt b/SYS/KERNEL.S.PWDX.txt index 1196d2ef..69618d08 100644 --- a/SYS/KERNEL.S.PWDX.txt +++ b/SYS/KERNEL.S.PWDX.txt @@ -161,9 +161,9 @@ PWDX.PutPW.1 jsr K.GetmemPtr bcs .99 ldy #S.PW.UID - sta CLRWRITEAUX + sta IO.CLRWRITEAUX sta (TXTPTR),y - sta SETWRITEAUX + sta IO.SETWRITEAUX .13 jsr PWDX.GetRecLen diff --git a/SYS/KERNEL.S.SHARED.txt b/SYS/KERNEL.S.SHARED.txt index 7a05d325..df160eaa 100644 --- a/SYS/KERNEL.S.SHARED.txt +++ b/SYS/KERNEL.S.SHARED.txt @@ -28,38 +28,38 @@ SHARED.IsDigit.8 clc rts *-------------------------------------- -SHARED.TXTPTRgY sta CLRREADAUX +SHARED.TXTPTRgY sta IO.CLRREADAUX lda (TXTPTR),y - sta SETREADAUX + sta IO.SETREADAUX rts *-------------------------------------- -SHARED.TXTPTRgn sta CLRREADAUX +SHARED.TXTPTRgn sta IO.CLRREADAUX lda (TXTPTR) - sta SETREADAUX + sta IO.SETREADAUX beq SHARED.RTS SHARED.TXTPTRn inc TXTPTR bne SHARED.RTS inc TXTPTR+1 rts *-------------------------------------- -SHARED.FORPNTgY sta CLRREADAUX +SHARED.FORPNTgY sta IO.CLRREADAUX lda (FORPNT),y - sta SETREADAUX + sta IO.SETREADAUX rts *-------------------------------------- -SHARED.FORPNTpY sta CLRWRITEAUX +SHARED.FORPNTpY sta IO.CLRWRITEAUX sta (FORPNT),y - sta SETWRITEAUX + sta IO.SETWRITEAUX rts *-------------------------------------- -SHARED.FORPNTgn sta CLRREADAUX +SHARED.FORPNTgn sta IO.CLRREADAUX lda (FORPNT) - sta SETREADAUX + sta IO.SETREADAUX bra SHARED.FORPNTn *-------------------------------------- -SHARED.FORPNTpn sta CLRWRITEAUX +SHARED.FORPNTpn sta IO.CLRWRITEAUX sta (FORPNT) - sta SETWRITEAUX + sta IO.SETWRITEAUX SHARED.FORPNTn inc FORPNT bne SHARED.RTS inc FORPNT+1 @@ -116,9 +116,9 @@ SHARED.PullP2P1 >PULLW ZPPtr2 >PULLW ZPPtr1 rts *-------------------------------------- -SHARED.P3gY sta CLRREADAUX +SHARED.P3gY sta IO.CLRREADAUX lda (ZPPtr3),y - sta SETREADAUX + sta IO.SETREADAUX rts *-------------------------------------- MAN diff --git a/SYS/KERNEL.S.STAT.txt b/SYS/KERNEL.S.STAT.txt index 4c51d8fe..29d68e84 100644 --- a/SYS/KERNEL.S.STAT.txt +++ b/SYS/KERNEL.S.STAT.txt @@ -18,7 +18,7 @@ K.ChMod jsr PFT.CheckPath2 stz K.MLI.PARAMS+3+S.FIEX.ACL read mode - >MLICALL MLIACL + >MLICALL MLI.ACL bcs .9 >LDYA K.S.STAT+S.STAT.MODE @@ -27,7 +27,7 @@ K.ChMod jsr PFT.CheckPath2 lda #$57 write mode sta K.MLI.PARAMS+3+S.FIEX.ACL - >MLICALL MLIACL + >MLICALL MLI.ACL .9 rts STAT.RET4 inc pStack @@ -66,7 +66,7 @@ K.FStat ldy #2 lda (pFD),y sta K.MLI.PARAMS+1 - >MLICALL MLIGETEOF + >MLICALL MLI.GETEOF bcs STAT.RTS ldx #2 diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index 34e3b74b..3bc193ca 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -501,7 +501,7 @@ K.FFlush jsr PFT.CheckNodeA lda (pFD) bne STDIO.IOERR - >MLICALL MLIFLUSH + >MLICALL MLI.FLUSH .9 rts *-------------------------------------- @@ -549,12 +549,12 @@ K.FSeek ldy #5 bra .8 * SEEK.CUR -.20 >MLICALL MLIGETMARK +.20 >MLICALL MLI.GETMARK bcc .8 rts * SEEK.END -.30 >MLICALL MLIGETEOF +.30 >MLICALL MLI.GETEOF bcs .9 .8 ldy #0 @@ -572,13 +572,13 @@ K.FSeek ldy #5 bcs .99 Offset out of range! -.82 >MLICALL MLISETMARK +.82 >MLICALL MLI.SETMARK bcc .9 cmp #MLI.E.BEYEOF bne .9 - >MLICALL MLISETEOF + >MLICALL MLI.SETEOF bcc .82 .9 rts @@ -631,7 +631,7 @@ K.FEOF jsr PFT.CheckNodeA K.FTell jsr PFT.CheckNodeA bcs .9 - >MLICALL MLIGETMARK + >MLICALL MLI.GETMARK bcs .9 lda #0 @@ -658,7 +658,7 @@ K.FTell jsr PFT.CheckNodeA K.Remove jsr PFT.CheckPathYA bcs .9 - >MLICALL MLIDESTROY + >MLICALL MLI.DESTROY .9 rts */-------------------------------------- * # Rename @@ -694,7 +694,7 @@ K.Rename jsr PFT.CheckPath2 .8 sty K.Buf256 >LDYAI K.Buf256 >STYA K.MLI.PARAMS+3 - >MLICALL MLIRENAME + >MLICALL MLI.RENAME .9 >RET 4 */-------------------------------------- diff --git a/SYS/KERNEL.S.TERM.txt b/SYS/KERNEL.S.TERM.txt index 5f497c22..80d97819 100644 --- a/SYS/KERNEL.S.TERM.txt +++ b/SYS/KERNEL.S.TERM.txt @@ -34,8 +34,8 @@ TERM.WRITE jsr TERM.GetIOCTLBufCntDCB *-------------------------------------- TERM.TOAUX lda A2osX.ASCREEN - sta SETREADAUX - sta SETWRITEAUX + sta IO.SETREADAUX + sta IO.SETWRITEAUX cmp (ZPDCBPtr) #S.DCB.TTY.DEVID @@ -47,8 +47,8 @@ TERM.TOAUX lda A2osX.ASCREEN jsr .8 - sta CLRREADAUX - sta CLRWRITEAUX + sta IO.CLRREADAUX + sta IO.CLRWRITEAUX rts .8 jmp (TERMX,x) @@ -84,12 +84,12 @@ TERM.GetDCB ldy #S.FD.DEV.DCBPTR rts *-------------------------------------- -TERM.GetBufByte sta CLRREADAUX +TERM.GetBufByte sta IO.CLRREADAUX lda (ZPBufPtr) - sta SETREADAUX + sta IO.SETREADAUX rts *-------------------------------------- -TERM.GetDevName sta CLRREADAUX +TERM.GetDevName sta IO.CLRREADAUX lda pFD clc @@ -100,7 +100,7 @@ TERM.GetDevName sta CLRREADAUX adc /S.FD.DEV sta TXTPTR+1 - sta SETREADAUX + sta IO.SETREADAUX rts *-------------------------------------- MAN diff --git a/SYS/KERNEL.S.TERMX.txt b/SYS/KERNEL.S.TERMX.txt index 5768c2df..3c668a88 100644 --- a/SYS/KERNEL.S.TERMX.txt +++ b/SYS/KERNEL.S.TERMX.txt @@ -46,7 +46,7 @@ TERMX.STATUS tya .HS 2C BIT ABS .1 ldy #3 - sta CLRWRITEAUX + sta IO.CLRWRITEAUX .2 lda TERMX.DIB,y sta (ZPBufPtr),y @@ -79,7 +79,7 @@ TERMX.STATUS tya jsr TERMX.CheckOA bmi .7 - bit KBD + bit IO.KBD bmi .8 .7 lda #$ff EOF = TRUE @@ -102,9 +102,9 @@ TERMX.OPEN jsr TERMX.ISOPENED lda IO.hFD in ZPTMP - sta CLRWRITEAUX + sta IO.CLRWRITEAUX sta A2osX.SCRNDEVS,x - sta SETWRITEAUX + sta IO.SETWRITEAUX ldy #S.DCB.TTY.S lda (ZPDCBPtr),y @@ -115,12 +115,12 @@ TERMX.OPEN jsr TERMX.ISOPENED *-------------------------------------- TERMX.CONTROL lda (ZPDCBPtr) #S.DCB.TTY.DEVID - sta CLRWRITEAUX + sta IO.CLRWRITEAUX sta A2osX.ASCREEN - sta SETWRITEAUX + sta IO.SETWRITEAUX - sta SETTEXT - sta CLRMIXED + sta IO.SETTEXT + sta IO.CLRMIXED jsr TERMX.SCRCPY @@ -139,9 +139,9 @@ TERMX.CLOSE jsr TERMX.ISOPENED lda (ZPDCBPtr) #S.DCB.TTY.DEVID tax - sta CLRWRITEAUX + sta IO.CLRWRITEAUX stz A2osX.SCRNDEVS,x - sta SETWRITEAUX + sta IO.SETWRITEAUX clc rts @@ -163,10 +163,10 @@ TERMX.READ bit bActive is screen active? jsr TERMX.CheckOA bmi .6 Open apple key, not for us... - lda KBD + lda IO.KBD bpl .6 - sta KBDSTROBE + sta IO.KBDSTROBE and #$7F cmp #C.ESC @@ -237,16 +237,16 @@ TERMX.READ bit bActive is screen active? pla ldy .8+1 - sta CLRWRITEAUX + sta IO.CLRWRITEAUX sta (ZPBufPtr),y - sta SETWRITEAUX + sta IO.SETWRITEAUX iny sty .8+1 bra .70 .8 lda #$ff SELF MODIFIED - sta CLRWRITEAUX + sta IO.CLRWRITEAUX ldy #S.IOCTL.BYTECNT sta (ZPIOCTL),y @@ -1118,10 +1118,10 @@ TERMX.ED.2 sty .1+1 bit bActive bpl .4 - sta SETPAGE2 + sta IO.SETPAGE2 jsr .7 - sta CLRPAGE2 + sta IO.CLRPAGE2 jsr .7 .4 ldy #79 @@ -1277,7 +1277,7 @@ TERMX.IAC.SDONT ldx #DONT jsr TERMX.COUT jmp TERMX.SETM.0 *-------------------------------------- -TERMX.CheckOA lda OPENAPPLE +TERMX.CheckOA lda IO.OPENAPPLE php bpl .5 Restore Title @@ -1353,14 +1353,14 @@ TERMX.SCR0CPY lda ZPDCBPtr ldx #78 - sta SETPAGE2 + sta IO.SETPAGE2 ldy #39 jsr .8 ldx #79 - sta CLRPAGE2 + sta IO.CLRPAGE2 ldy #39 @@ -1409,10 +1409,10 @@ TERMX.COPY.XtoL1 lda SCR.BH,x sta ZPScrBL2+1 - sta SETPAGE2 + sta IO.SETPAGE2 jsr .6 - sta CLRPAGE2 + sta IO.CLRPAGE2 .6 ldy #39 @@ -1490,9 +1490,9 @@ SetCharAtY.SCR1 lsr ZPTmpX bcs .2 - sta SETPAGE2 + sta IO.SETPAGE2 sta (ZPScrBL1),y - sta CLRPAGE2 + sta IO.CLRPAGE2 rts .2 sta (ZPScrBL1),y diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index 4864bd2e..7721a780 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -12,8 +12,8 @@ NEW * S.TIME filled with System date/time *\-------------------------------------- K.Time >PULLW FORPNT - >MLICALL MLIGETTIME - >LDYAI DATELO + >MLICALL MLI.GETTIME + >LDYAI GP.DATE >STYA TXTPTR ldx #SYS.PTime2Time jmp K.SYSCALL.JMPX diff --git a/SYS/KERNEL.S.UNISTD.txt b/SYS/KERNEL.S.UNISTD.txt index ba299b5c..385176c7 100644 --- a/SYS/KERNEL.S.UNISTD.txt +++ b/SYS/KERNEL.S.UNISTD.txt @@ -198,7 +198,7 @@ K.ChOwn jsr PFT.CheckPath2 stz K.MLI.PARAMS+3+S.FIEX.ACL read mode - >MLICALL MLIACL + >MLICALL MLI.ACL bcs .9 lda (pStack) @@ -215,7 +215,7 @@ K.ChOwn jsr PFT.CheckPath2 .2 lda #$57 write mode sta K.MLI.PARAMS+3+S.FIEX.ACL - >MLICALL MLIACL + >MLICALL MLI.ACL .9 >RET 4 *-------------------------------------- diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 1ff578bf..b6abd727 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -67,7 +67,7 @@ D1 .DA #0 .DA D1.S D1.B .PH $D000 - .DA #RRAMWRAMBNK1 + .DA #IO.RRAMWRAMBNK1 .INB usr/src/sys/kernel.s.stat .INB usr/src/sys/kernel.s.dirent .INB usr/src/sys/kernel.s.unistd @@ -83,7 +83,7 @@ D2 .DA #0 .DA D2.S D2.B .PH $D000 - .DA #RRAMWRAMBNK2 + .DA #IO.RRAMWRAMBNK2 .INB usr/src/sys/kernel.s.mount .INB usr/src/sys/kernel.s.stkobj .INB usr/src/sys/kernel.s.arg diff --git a/SYS/KRNL8M.S.txt b/SYS/KRNL8M.S.txt new file mode 100644 index 00000000..e119388a --- /dev/null +++ b/SYS/KRNL8M.S.txt @@ -0,0 +1,136 @@ +NEW + AUTO 3,1 + .LIST OFF + .OP 65C02 + .OR $2000 + + .TF sys/krnl8m + + .INB inc/macros.i + .INB inc/a2osx.i + .INB inc/io.i + .INB inc/io.iic.i + .INB inc/io.iigs.i + .INB inc/mli.i + .INB inc/mli.e.i + .INB inc/net.telnet.i + .INB inc/xy.mouse.i + + .INB inc/kernel.i + .INB usr/src/sys/kernel.s.def + .INB usr/src/sys/kernel.s.init + .INB usr/src/shared/x.printf.s + +A2osX.Unpak >STYA ZPOutBufPtr + .INB usr/src/shared/x.unpak.s + +PAKME.MAIN .DA MAIN +PAKME.AUX .DA AUX +PAKME.D1 .DA D1 +PAKME.D2 .DA D2 +PAKME.E0 .DA E0 + +MAIN .DA #0 + .DA MAIN.S + +MAIN.B .PH $1000 + .INB usr/src/sys/kernel.s.gp + .INB usr/src/sys/kernel.s.core + .INB usr/src/sys/kernel.s.drv + .INB usr/src/sys/kernel.s.pft + .INB usr/src/sys/kernel.s.fs + .INB usr/src/sys/kernel.s.mathf + .EP +MAIN.S .EQ *-MAIN.B + +AUX .DA #0 + .DA AUX.S + +AUX.B .PH Mem.XHiMem + + .DA SHARED.TXTPTRgn OSD.TXTPTRgn + + .INB usr/src/sys/kernel.s.jmpx + .INB usr/src/sys/kernel.s.termx + .INB usr/src/sys/kernel.s.strvx + .INB usr/src/sys/kernel.s.envx + .INB usr/src/sys/kernel.s.timex + .INB usr/src/sys/kernel.s.md5x + .INB usr/src/sys/kernel.s.pwdx + .INB usr/src/sys/kernel.s.slistx + .INB usr/src/sys/kernel.s.blistx + .INB usr/src/sys/kernel.s.errorx + .EP +AUX.S .EQ *-AUX.B + +D1 .DA #0 + .DA D1.S + +D1.B .PH $D000 + .DA #IO.RRAMWRAMBNK1 + .INB usr/src/sys/kernel.s.stat + .INB usr/src/sys/kernel.s.dirent + .INB usr/src/sys/kernel.s.unistd + .INB usr/src/sys/kernel.s.stdio + .INB usr/src/sys/kernel.s.prodos + .INB usr/src/sys/kernel.s.dev + .INB usr/src/sys/kernel.s.sock + .INB usr/src/sys/kernel.s.pipe + .EP +D1.S .EQ *-D1.B + +D2 .DA #0 + .DA D2.S + +D2.B .PH $D000 + .DA #IO.RRAMWRAMBNK2 + .INB usr/src/sys/kernel.s.mount + .INB usr/src/sys/kernel.s.stkobj + .INB usr/src/sys/kernel.s.arg + .INB usr/src/sys/kernel.s.error + .INB usr/src/sys/kernel.s.stdlib + .INB usr/src/sys/kernel.s.string + .INB usr/src/sys/kernel.s.bin + .INB usr/src/sys/kernel.s.ps + .EP +D2.S .EQ *-D2.B + +E0 .DA #0 + .DA E0.S + +E0.B .PH $E000 + .INB usr/src/sys/kernel.s.jmp + .INB usr/src/sys/kernel.s.irq + .INB usr/src/sys/kernel.s.shared + .INB usr/src/sys/kernel.s.math + .INB usr/src/sys/kernel.s.math16 + .INB usr/src/sys/kernel.s.math32 + + .INB usr/src/sys/kernel.s.term + .INB usr/src/sys/kernel.s.strv + .INB usr/src/sys/kernel.s.env + .INB usr/src/sys/kernel.s.time + .INB usr/src/sys/kernel.s.md5 + .INB usr/src/sys/kernel.s.pwd + .INB usr/src/sys/kernel.s.slist + + .INB usr/src/sys/kernel.s.mem + +DevMgr.Timer .BS 1 +DevMgr.Stat .DA DevMgr.FreeMem +DevMgr.Free .DA DevMgr.FreeMem + .DA DevMgr.HiMem +DevMgr.FreeMem .EQ * + .EP + +E0.S .EQ *-E0.B + + .AS "PAKME" TAG + .DA $2000 BIN ORG + .DA #5 Chunk Count + .DA PAKME.MAIN Chunks + + .INB usr/src/sys/kernel.s.ctrl +MAN +SAVE usr/src/sys/krnl8m.s +ASM diff --git a/SYS/PM.RAMWORKS.S.txt b/SYS/PM.RAMWORKS.S.txt index 7a94fdf6..1f25b64c 100644 --- a/SYS/PM.RAMWORKS.S.txt +++ b/SYS/PM.RAMWORKS.S.txt @@ -130,17 +130,17 @@ RW.CheckRAM3 jsr RW.ONLINE MLI Online at S3D2 clc .9 rts *-------------------------------------- -RW.DisableRAM lda DEVPTRS3D2 - cmp DEVPTRS S0D1=NOVEV +RW.DisableRAM lda GP.DEVPTRS3D2 + cmp GP.DEVPTRS S0D1=NOVEV bne .1 - lda DEVPTRS3D2+1 - cmp DEVPTRS+1 S0D1=NODEV + lda GP.DEVPTRS3D2+1 + cmp GP.DEVPTRS+1 S0D1=NODEV beq .8 S3D2=NODEV, nothing to do -.1 ldx DEVCNT +.1 ldx GP.DEVCNT -.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3 +.2 lda GP.DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3 and #$F3 cmp #$B3 beq .3 @@ -151,22 +151,22 @@ RW.DisableRAM lda DEVPTRS3D2 sec No device found, exit with error rts -.3 cpx DEVCNT +.3 cpx GP.DEVCNT beq .5 -.4 lda DEVLST+1,x - sta DEVLST,x +.4 lda GP.DEVLST+1,x + sta GP.DEVLST,x inx - cpx DEVCNT + cpx GP.DEVCNT bne .4 -.5 ldx DEVCNT - stz DEVLST,x - dec DEVCNT - lda DEVPTRS - sta DEVPTRS3D2 - lda DEVPTRS+1 - sta DEVPTRS3D2+1 +.5 ldx GP.DEVCNT + stz GP.DEVLST,x + dec GP.DEVCNT + lda GP.DEVPTRS + sta GP.DEVPTRS3D2 + lda GP.DEVPTRS+1 + sta GP.DEVPTRS3D2+1 jsr RW.ONLINE @@ -174,7 +174,7 @@ RW.DisableRAM lda DEVPTRS3D2 rts *-------------------------------------- RW.ONLINE jsr MLI - .DA #MLIONLINE + .DA #MLI.ONLINE .DA RW.ONLINEPARAM rts *-------------------------------------- @@ -190,7 +190,7 @@ RW.DetectHW php sta .3+1 sta .6+1 - sta SETALTZP + sta IO.SETALTZP ldx #0 start detection at page $00 @@ -253,7 +253,7 @@ RW.DetectHW php dey bpl .6 - sta CLRALTZP + sta IO.CLRALTZP plp txa PGCNT > 0 ? @@ -270,8 +270,8 @@ RW.DetectHW php .9 sec rts *-------------------------------------- -RW.Install lda RRAMWRAMBNK1 - lda RRAMWRAMBNK1 +RW.Install lda IO.RRAMWRAMBNK1 + lda IO.RRAMWRAMBNK1 ldx #RWDRV.SIZE @@ -292,9 +292,9 @@ RW.Install lda RRAMWRAMBNK1 sta RWDRV.IO1+1 sta RWDRV.EXIT+1 - lda RROMBNK1 + lda IO.RROMBNK1 - sta SETWRITEAUX + sta IO.SETWRITEAUX ldx #RWDRVX.SIZE @@ -308,16 +308,16 @@ RW.Install lda RRAMWRAMBNK1 sta RWDRVX.XM.IO2+1 sta RWDRVX.XM.IO3+1 - sta CLRWRITEAUX - inc DEVCNT - ldx DEVCNT + sta IO.CLRWRITEAUX + inc GP.DEVCNT + ldx GP.DEVCNT lda #$B0 Slot 3,Drive 2,0=Not Removable, 0=no int, 00=1 Volume - sta DEVLST,x + sta GP.DEVLST,x lda #RWDRV.START - sta DEVPTRS3D2 + sta GP.DEVPTRS3D2 lda /RWDRV.START - sta DEVPTRS3D2+1 + sta GP.DEVPTRS3D2+1 clc rts @@ -329,24 +329,30 @@ RW.Format jsr RW.BLOCK.SET00 lda #0 ror sta RW.BLOCK2.TB + jsr MLI - .DA #MLIGETTIME + .DA #MLI.GETTIME .DA 0 + ldx #3 -.1 lda DATELO,x + +.1 lda GP.DATE,x sta RW.BLOCK2.CT,x dex bpl .1 + ldx #RW.BLOCK2.END-RW.BLOCK2 + .2 lda RW.BLOCK2-1,x sta RW.BLOCK-1,x dex bne .2 jsr MLI Write Block 2,First VOL directory block - .DA #MLIWRITEBLOCK + .DA #MLI.WRITEBLOCK .DA RW.MLIWRITEBLOCK bcc .22 + rts *-------------------------------------- .22 jsr RW.BLOCK.SET00 @@ -356,9 +362,10 @@ RW.Format jsr RW.BLOCK.SET00 inc RW.MLIWRITEBLOCK.BLK jsr MLI Write Block 3,Last VOL directory block - .DA #MLIWRITEBLOCK + .DA #MLI.WRITEBLOCK .DA RW.MLIWRITEBLOCK bcc .33 + rts *-------------------------------------- .33 lda RW.PGCNT divide RW.PGCNT by 32 to get how many bitmap @@ -373,11 +380,13 @@ RW.Format jsr RW.BLOCK.SET00 lda RW.PGCNT and #$1F need an extra incomplete bitmap block? beq .3 + inx .3 stx RW.BITMAPCNT store TOTAL bitmap block needed .4 lda RW.FBITMAPCNT beq .49 + dec RW.FBITMAPCNT jsr RW.BLOCK.SETFF @@ -440,7 +449,7 @@ RW.Format jsr RW.BLOCK.SET00 bra .62 .63 jsr MLI Write Block 4,5... - .DA #MLIWRITEBLOCK + .DA #MLI.WRITEBLOCK .DA RW.MLIWRITEBLOCK bcs .9 @@ -530,12 +539,12 @@ RWDRV.START ldy DRV.COMMAND 0 = Status ? sbc RWDRV.MAXHI+1 bcs RWDRV.IOERR DRV.BLKNUM >= RW.DRV.SIZE, IO error - bit RD80STORE save 80 Store status + bit IO.RD80STORE save 80 Store status php Disable IRQ as no vector set in RW Banks sei - sta CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere + sta IO.CLR80STORE make sure SETREADAUX/SETWRITEAUX effective everywhere txa Get Back DRV.BLKNUM asl compute PAGE = blocknumLO *2 @@ -561,12 +570,12 @@ RWDRV.IO1 sta RWBankSelect Select RAMWorks Bank dey Y=CMD, zero if read bne RWDRV.W non zero, go write - sta SETREADAUX + sta IO.SETREADAUX ldx #DRV.A2L READ:copy from RAM to BUFF lda #DRV.BUFF bra RWDRV.RW -RWDRV.W sta SETWRITEAUX +RWDRV.W sta IO.SETWRITEAUX ldx #DRV.BUFF lda #DRV.A2L WRITE:copy from BUFF to RAM dey Make sure Y=0 for main loop below @@ -588,13 +597,13 @@ RWDRV.RW.DST sta ($FF),y bcc RWDRV.RW.LOOP RWDRV.EXIT stz RWBankSelect - sta CLRREADAUX - sta CLRWRITEAUX + sta IO.CLRREADAUX + sta IO.CLRWRITEAUX plp restore IRQ bpl RMDRV.CMDSTATUS - sta SET80STORE + sta IO.SET80STORE RMDRV.CMDSTATUS RWDRV.MAXLO ldx #$FF return device block count in X,Y... @@ -609,7 +618,7 @@ RWDRV.IOERR lda #MLI.E.IO Carry already set * X=Page(0/1 or LC),A=Bank *-------------------------------------- RWDRV.GOAUX pha save BANK - sta SETWRITEAUX + sta IO.SETWRITEAUX ldy #RWDRVX.XM.SIZE Backup begining of $300 to generate move code @@ -620,13 +629,13 @@ RWDRV.GOAUX pha save BANK pla restore BANK - sta SETREADAUX + sta IO.SETREADAUX jsr RWDRVX.START Setup Code in main mem at $300 for data move * returns : CC=WRITE, CS=READ - sta CLRREADAUX CLRWRITEAUX already triggered by code copy + sta IO.CLRREADAUX IO.CLRWRITEAUX already triggered by code copy jsr RWDRV.XM.RUN Now execute generated code in main memory - sta SETREADAUX + sta IO.SETREADAUX jmp RWDRVX.RESTORE RWDRV.END .EP @@ -651,7 +660,7 @@ RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK lsr php - ldy #RRAMWRAMBNK1 + ldy #IO.RRAMWRAMBNK1 txa beq .1 page 0/1, no need to check BANK @@ -661,7 +670,7 @@ RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK ora #$10 Remap $C0 page to $D0 BNK2 - ldy #RRAMWRAMBNK2 + ldy #IO.RRAMWRAMBNK2 .1 sty RWDRVX.XM.RWLC+1 Save to select proper RW bank later @@ -684,7 +693,7 @@ RWDRVX.START sta RWDRVX.XM.BANK+1 setup BANK stz RWDRVX.XM.DST+1 WRITE to dst LO = 0 sta RWDRVX.XM.DST+2 WRITE to dst HI = PAGE -.3 sta CLRWRITEAUX +.3 sta IO.CLRWRITEAUX ldy #RWDRVX.XM.SIZE @@ -713,7 +722,7 @@ RWDRVX.RESTORE ldy #RWDRVX.XM.SIZE Now, restore begining of $300 *-------------------------------------- RWDRVX.XM.START ldy #2 2 pages to copy -RWDRVX.XM.COPY sta CLRALTZP +RWDRVX.XM.COPY sta IO.CLRALTZP jsr RWDRV.XM.RUN+RWDRVX.XM.SRCLC-RWDRVX.XM.START sta $C000,x select proper Main/Aux ZP/LC @@ -726,7 +735,7 @@ RWDRVX.XM.SRC lda $FFFF,x inx bne RWDRVX.XM.SRC - sta CLRALTZP + sta IO.CLRALTZP jsr RWDRV.XM.RUN+RWDRVX.XM.DSTLC-RWDRVX.XM.START sta $C000,x select proper Main/Aux ZP/LC @@ -744,14 +753,14 @@ RWDRVX.XM.DST sta $FFFF,x dey bne RWDRVX.XM.COPY - sta CLRALTZP + sta IO.CLRALTZP RWDRVX.XM.IO3 stz RWBankSelect *-------------------------------------- -RWDRVX.XM.MNLC bit RRAMWRAMBNK1 ProDOS always uses LCBANK1 +RWDRVX.XM.MNLC bit IO.RRAMWRAMBNK1 ProDOS always uses LCBANK1 lda #0 - ldx #CLRALTZP + ldx #IO.CLRALTZP rts *-------------------------------------- @@ -763,7 +772,7 @@ RWDRVX.XM.RWLC bit $C000 RWDRVX.XM.BANK lda #$FF - ldx #SETALTZP + ldx #IO.SETALTZP rts *--------------------------------------