diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index e1874f00..99f937b3 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.TEST.po b/.Floppies/A2OSX.TEST.po index 49a960ed..1cfe44a1 100644 Binary files a/.Floppies/A2OSX.TEST.po and b/.Floppies/A2OSX.TEST.po differ diff --git a/.Floppies/ProDOSFX.BOOT.po b/.Floppies/ProDOSFX.BOOT.po new file mode 100644 index 00000000..a47d6ef4 Binary files /dev/null and b/.Floppies/ProDOSFX.BOOT.po differ diff --git a/BIN/CC.S.DECL.txt b/BIN/CC.S.DECL.txt index 1839df63..c5c856a5 100644 --- a/BIN/CC.S.DECL.txt +++ b/BIN/CC.S.DECL.txt @@ -3,11 +3,7 @@ NEW .LIST OFF *-------------------------------------- CC.DECL jsr CC.IsLetter - bcc .10 - -* TODO: PREOPS ++ --..... - - bcs .90 + bcs .80 .10 >LDYA L.CC.SCSPEC jsr CC.LookupID @@ -16,7 +12,7 @@ CC.DECL jsr CC.IsLetter * TODO: typedef .... bcs .90 -*-------------------------------------- + .20 >LDYA L.CC.TYPEQUAL jsr CC.LookupID bcs .80 @@ -36,9 +32,30 @@ CC.DECL jsr CC.IsLetter .21 jsr CC.SYM.New Y,A=T/Q, add with undef value... bcs .99 + jsr CC.SYM.Store + bcs .99 +* TODO: AOPS + cmp #'=' + bne .90 + + jsr CC.GetNextCharNB skip '=' + bcs .99 + + jsr CC.SYM.GetTypeInYA expected T/Q + jsr CC.EXP.Eval + bcs .99 + jsr CC.SYM.PopValue Y,A = T/Q, Set value to this var +.29 bcs .99 + + + jsr CC.SYM.FreeBuf + + clv + clc + rts .80 bit #$60 clc diff --git a/BIN/CC.S.STMT.txt b/BIN/CC.S.STMT.txt index baaf2062..2783a988 100644 --- a/BIN/CC.S.STMT.txt +++ b/BIN/CC.S.STMT.txt @@ -2,6 +2,59 @@ NEW AUTO 3,1 .LIST OFF *-------------------------------------- +CC.STMT jsr CC.SYM.Lookup var= or func() ? + bcs .80 + + ldy #SYM.Q + lda (ZPSymBufPtr),y + bit #SYM.Q.FUNC + bne .20 + + jsr CC.GetCharNB var = ? + bcs .90 + +* TODO: AOPS + + cmp #'=' + bne .90 + + jsr CC.GetNextChar Skip = + bcs .99 + + jsr CC.SYM.GetTypeInYA + jsr CC.EXP.Eval + bcs .99 + + jsr CC.SYM.PopValue + bcs .99 + + jsr CC.SYM.FreeBufPop + + + clv + clc + rts + + +.20 ldy #0 func( ... ); + lda #0 + jsr CC.F.CallNoRetV + bcs .9 + + jsr CC.SYM.FreeBufPop + + clv + clc + rts + +.80 bit #$60 + clc + rts + +.90 lda #E.CSYN + sec +.99 rts +*-------------------------------------- * X = KW.ID *-------------------------------------- CC.STMT.CPStmt lda LocalPtr Locals diff --git a/ProDOS.FX/ProDOS.S.ILDR.txt b/ProDOS.FX/ProDOS.S.ILDR.txt index 1dd3c6ae..1b3bebba 100644 --- a/ProDOS.FX/ProDOS.S.ILDR.txt +++ b/ProDOS.FX/ProDOS.S.ILDR.txt @@ -3,136 +3,87 @@ NEW *-------------------------------------- ILDR.START jsr MLI check for file 'atinit' .DA #MLIGETFILEINFO - .DA gfi_list - bcc gfi_ok branch if 'atinit' file found + .DA ILDR.GFINFO + bcs ILDR.ENUMPM - cmp #MLI.E.FNOTFND - beq ILDR.SYSTEM if so, continue loading interpreter - -ATINIT.KO jmp badatinit - -gfi_ok lda gfi_type + lda ILDR.GFINFO+S.FI.T cmp #$E2 is 'atinit' correct file type? - bne ATINIT.KO error - wrong file type + bne ILDR.ENUMPM error - wrong file type - jsr MLI open 'atinit' file - .DA #MLIOPEN - .DA atopen - bne ATINIT.KO error + ldy #ILDR.ATINIT + lda /ILDR.ATINIT + jsr ILDR.LoadFile + bcc .1 - lda #$9F max size = 39.75k ($2000-$BF00) - sta rdlen+1 - stz rdlen + jmp ILDR.MLIERR - jsr MLI read 'atinit' file to 'sysentry' - .DA #MLIREAD - .DA rdparm - bne ATINIT.KO error - too big - - jsr MLI close 'atinit' file - .DA #MLICLOSE - .DA clparm - bne ATINIT.KO error - - lda RROMBNK2 enable ROM +.1 lda RROMBNK2 enable ROM jsr sysentry execute ATinit *-------------------------------------- -ILDR.SYSTEM lda /dbuf search directory buffer - sta idxl+1 - lda #$04 start 1 entry past header - bne H2434 always. +* BOOT block read 4 directory blocks at dbuf=$C00 -> $13FF +*-------------------------------------- +ILDR.ENUMPM .DO PM -H2432 lda idxl calc next entry position -H2434 clc - adc dbuf+35 inc to next entry address - sta idxl - bcs H2451 branch if page cross. - adc dbuf+35 test for end of block. - bcc H2453 branch if not page cross - lda idxl+1 - lsr end of block? - bcc H2453 no. - cmp #$09 end of directory? - bne H244D no. - jmp nointrp no interpreter, go quit. + jsr ILDR.EnumInit -H244D lda #$04 reset index to 1st entry in next block. - sta idxl -H2451 inc idxl+1 inc to next page. -H2453 ldy #$10 check file type. - lda #$FF must be a prodos sys file - eor (idxl),y - bne H2432 if not sys. +.1 ldx #S.FI.T.BIN + ldy #ILDR.KMSFX + lda /ILDR.KMSFX + jsr ILDR.EnumNext + bcs .4 - tay see if active - lda (idxl),y - beq H2432 if deleted file. + jsr ILDR.LoadFilePBuf + bcs ILDR.MLIERR - and #$0F strip file 'kind'. - sta pbuf save length of name. - cmp #$08 must be at least 'x.system' - bcc H2432 else, ignore it. - - tay compare last 7 chars for '.system' - ldx #$06 - -H246C lda (idxl),y - eor iterp,x - asl ignore bit 7 - bne H2432 branch if something else - - dey - dex - bpl H246C - - ldy #$00 - -H247A iny - lda (idxl),y - sta pbuf,y - cpy pbuf - bne H247A - - jsr MLI open interpreter file - .DA #$C8 - .DA opparm - bne badlod - - jsr MLI get eof (length of file) - .DA #$D1 - .DA efparm - bne badlod - - lda eof+2 - bne toolong - - lda eof+1 - cmp #$9F max size = 39.75k ($2000-$BF00) - bcs toolong - - sta rdlen+1 - lda eof - sta rdlen (read entire file) - - jsr MLI read interpreter file - .DA #$CA - .DA rdparm - beq H24C8 go close if successfully read. - - cmp #$56 memory conflict? - beq toolong then too large - bne badlod else, unable to load. - -H24C8 jsr MLI close interpreter file - .DA #$CC - .DA clparm - bne badlod hopefully never taken - - lda RROMBNK2 enable ROM + ldx #3 - sta CLR80DISP - sta CLR80STORE +.2 lda idxl,x + pha + dex + bpl .2 + jsr sysentry + + bit RROMBNK2 enable ROM + + ldx #0 + +.3 pla + sta idxl,x + inx + cpx #4 + bne .3 + + >DEBUGOA + + bra .1 + + .FIN +*-------------------------------------- +.4 jsr ILDR.EnumInit + + ldx #S.FI.T.SYS + ldy #ILDR.SYSTEMSFX + lda /ILDR.SYSTEMSFX + jsr ILDR.EnumNext + bcs .9 + + jsr ILDR.LoadFilePBuf + bcs ILDR.MLIERR + + bit RROMBNK2 enable ROM + + bit RDIOUDIS + sta SETIOUDIS + sta CLRDHIRES + bmi .5 + + sta CLRIOUDIS + +.5 sta CLR80DISP + sta CLR80STORE + sta SETTEXT + sta CLRMIXED jsr init jsr setvid jsr setkbd @@ -140,94 +91,265 @@ H24C8 jsr MLI close interpreter file jmp sysentry go run interpreter -nointrp jsr MLI no interpreter found,so quit. - .DA #$65 - .DA quitparm - -badatinit ldy #6 - -.1 lda atinitname,y - sta pbuf,y - dey - bpl .1 - -badlod ldx #ILDR.MSG.SYSLOADERR-ILDR.MSG - .HS 2C BIT ABS - -toolong ldx #ILDR.MSG.SYSTOOLARG-ILDR.MSG - jsr ILDR.PrintX - - ldy #0 - -.1 iny - lda pbuf,y - jsr COUT - cpy pbuf +.9 jsr MLI no .SYSTEM found, so quit. + .DA #MLIQUIT + .DA ILDR.QUIT +*-------------------------------------- +ILDR.MLIERR cmp #MLI.E.BADBUF bne .1 - bra * -*-------------------------------------- -ILDR.PrintX bit RROMBNK2 - lda INVFLG - pha + ldx #ILDR.MSG.SYSTOOLARG-ILDR.MSG + + .HS 2C BIT ABS +.1 ldx #ILDR.MSG.SYSLOADERR-ILDR.MSG + + bit RROMBNK2 jsr SETINV -.1 lda ILDR.MSG,x +.2 lda ILDR.MSG,x pha ora #$80 jsr COUT inx pla - bpl .1 - + bpl .2 + lda #$A0 jsr COUT - - pla - sta INVFLG + + ldy #0 + +.3 iny + lda pbuf,y + jsr COUT + cpy pbuf + bne .3 + + bra * +*-------------------------------------- +ILDR.EnumInit lda /dbuf search directory buffer + sta idxl+1 + lda #dbuf+4 skip Prev/next Block Ptr + sta idxl + + lda dbuf+35 EL + sta ILDR.EL + + lda dbuf+36 EPB + sta ILDR.EPB + sta ILDR.EITB + + lda dbuf+37 FCLO + eor #$ff + sta ILDR.nFC + + lda dbuf+38 FCHI + eor #$ff + sta ILDR.nFC+1 + +ILDR.EnumInit.RTS rts *-------------------------------------- -ILDR.MSG .EQ * +* X = expected FileType +* Y,A = expected suffix +*-------------------------------------- +ILDR.EnumNext stx ILDR.FT + sty src + sta src+1 + +.1 inc ILDR.nFC + bne .2 + + inc ILDR.nFC+1 + sec + beq ILDR.EnumInit.RTS + +.2 dec ILDR.EITB + beq .3 + + lda idxl + clc + adc ILDR.EL + sta idxl + bcc .4 same page + + inc idxl+1 512b block, 2nd page + bra .4 + +.3 inc idxl+1 + lda idxl+1 + cmp #$14 last block read at $0C00-$13FF + bcs ILDR.EnumInit.RTS + + lda #4 + sta idxl + + lda ILDR.EPB + sta ILDR.EITB + +.4 lda (idxl) + beq .2 deleted / empty + + bmi .1 $D, $E, or $F... + + and #$0F + sta pbuf filename Len + + tay + +.5 lda (idxl),y + sta pbuf,y + dey + bne .5 + + ldy #16 + lda (idxl),y + + cmp ILDR.FT expected file type + bne .1 + + lda (src) expected suffix len + cmp pbuf + bcs .1 filename LE suffix + + tay + ldx pbuf + +.11 lda pbuf,x + eor (src),y + asl + bne .1 + + dex + dey + bne .11 + + ldy #$1D MIN_VERSION + lda (idxl),y + bpl .10 no lowercase information + + ldx pbuf + +.6 cpx #8 CS if MIN_VERSION to use + bcs .7 + + ldy #$1D MIN_VERSION + lda (idxl),y + and ILDR.LCBits,x + bne .8 + + bra .9 + +.7 ldy #$1C VERSION + lda (idxl),y + + and ILDR.LCBits-8,x + beq .9 + +.8 lda pbuf,x + eor #$20 to lowercase + sta pbuf,x + +.9 dex + bne .6 + +.10 clc + rts +*-------------------------------------- +ILDR.LoadFilePBuf + ldy #pbuf + lda /pbuf + +ILDR.LoadFile sty ILDR.OPEN+1 Filename + sta ILDR.OPEN+2 + + jsr MLI + .DA #MLIOPEN + .DA ILDR.OPEN + bcs .9 + + jsr MLI + .DA #MLIGETEOF + .DA ILDR.GETEOF + bcs .9 + + lda ILDR.GETEOF+4 + bne .99 + + lda ILDR.GETEOF+3 + cmp #$9F + bcc .1 + + bne .99 more than $9Fxx + + lda ILDR.GETEOF+2 + bne .99 more than $9F00 + +.1 jsr MLI + .DA #MLIREAD + .DA ILDR.READ + bcs .9 + + jsr MLI + .DA #MLICLOSE + .DA ILDR.CLOSE + +.9 rts + +.99 lda #MLI.E.BADBUF + sec + rts +*-------------------------------------- +ILDR.MSG .EQ * ILDR.MSG.SYSLOADERR .AT "Unable to load" ILDR.MSG.SYSTOOLARG .AT "Too Large" +ILDR.LCBits .HS 8040201008040201 *-------------------------------------- -gfi_list .DA #$0A - .DA atinitname - .HS 00 -gfi_type .HS 00000000 - .HS 0000000000000000 - .HS 0000 +ILDR.GFINFO .DA #10 PARAM CNT + .DA ILDR.ATINIT + .BS S.FI-3 *-------------------------------------- -atopen .HS 03 - .DA atinitname +ILDR.OPEN .DA #3 PARAM CNT + .BS 2 Filename .DA iobuf i/o buffer - .HS 01 ref# hard coded since no other files + .HS 01 REF *-------------------------------------- -atinitname .DA #06 length of name - .AS "ATINIT" name of appletalk config file +ILDR.GETEOF .DA #2 PARAM CNT + .DA #01 REF + .HS 000000 *-------------------------------------- -opparm .HS 03 - .DA pbuf - .DA iobuf - .HS 01 -efparm .HS 02 - .DA #01 -eof .HS 000000 length of file. -rdparm .HS 04 - .HS 01 +ILDR.READ .DA #4 PARAM CNT + .HS 01 REF .DA sysentry -rdlen .HS 0000 + .DA $9F00 Max file size .HS 0000 -clparm .HS 01 - .HS 00 -quitparm .HS 04 +*-------------------------------------- +ILDR.CLOSE .DA #1 PARAM CNT + .HS 01 REF +*-------------------------------------- +ILDR.QUIT .DA #4 PARAM CNT .HS 00 .HS 0000 .HS 00 .HS 0000 -iterp .AS ".SYSTEM" interpreter suffix that is required +*-------------------------------------- +ILDR.ATINIT .DA #6 + .AS "ATINIT" +ILDR.KMSFX .DA #3 + .AS ".PM" +ILDR.SYSTEMSFX .DA #7 + .AS ".SYSTEM" *-------------------------------------- ILDR.LEN .EQ *-ILDR.START +*-------------------------------------- + .DUMMY +ILDR.EPB .BS 1 +ILDR.EL .BS 1 +ILDR.nFC .BS 2 +ILDR.FT .BS 1 +ILDR.EITB .BS 1 + .ED +*-------------------------------------- MAN SAVE usr/src/prodos.fx/prodos.s.ildr LOAD usr/src/prodos.fx/prodos.s diff --git a/ProDOS.FX/ProDOS.S.LDR.txt b/ProDOS.FX/ProDOS.S.LDR.txt index c498f7d8..1442427d 100644 --- a/ProDOS.FX/ProDOS.S.LDR.txt +++ b/ProDOS.FX/ProDOS.S.LDR.txt @@ -330,7 +330,9 @@ LDR.ReadRoot lda LDR.MLIOL.P+1 place boot devnum in globals bcc .1 if ok, read next block. .FIN -.8 jmp $800 jmp to "load interpreter" code +.8 jsr CROUT + + jmp ILDR.START .9 ldx #LDR.MSG.ROOTERR jsr LDR.PrintX @@ -987,7 +989,7 @@ LDR.SetDevID ldy #$FE check attributes byte. sta devid rts *-------------------------------------- -LDR.Scr80Init phx Save MDR.MSG +LDR.Scr80Init phx Save LDR.MSG jsr LDR.IsIIc bcs LDR.Scr80Init2 @@ -1022,9 +1024,12 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME) jsr setnorm jsr home jsr SETINV + .DO LOGO lda #20 sta CV + inc + sta WNDTOP jsr VTAB lda #LOGO.PAKED @@ -1143,13 +1148,14 @@ LDR.Scr80Init2 lda #$8C Reset 80 col screen ($0C:HOME) bne .1 .FIN + jsr CLREOL jsr setnorm ldx #LDR.MSG.PRODOS jsr LDR.PrintX - plx MDR.MSG.machine type + plx get back LDR.MSG.machine type *-------------------------------------- LDR.PrintX bit RROMBNK2 diff --git a/ProDOS.FX/ProDOS.S.txt b/ProDOS.FX/ProDOS.S.txt index f6097e58..973c7b62 100644 --- a/ProDOS.FX/ProDOS.S.txt +++ b/ProDOS.FX/ProDOS.S.txt @@ -10,6 +10,7 @@ ENHFILENAME .EQ 1 LOWERCASE .EQ 1 ACL .EQ 1 LOGO .EQ 1 +PM .EQ 1 *-------------------------------------- XRWDBG .EQ 0 *-------------------------------------- diff --git a/SYS/KM.RAMWORKS.S.txt b/SYS/KM.RAMWORKS.S.txt index 1d09cdba..d4bfd9fc 100644 --- a/SYS/KM.RAMWORKS.S.txt +++ b/SYS/KM.RAMWORKS.S.txt @@ -4,6 +4,7 @@ NEW .OP 65C02 .OR $2000 .TF sys/km/km.ramworks +* .TF ramworks.pm *-------------------------------------- .INB inc/macros.i .INB inc/io.i @@ -15,10 +16,11 @@ TmpPtr1 .EQ $0 TmpPtr2 .EQ $2 Type .EQ $4 *-------------------------------------- -RW.SAVEZP0 .EQ $800 -RW.SAVEZP1 .EQ $900 +RW.SAVEZP0 .EQ $2800 +RW.SAVEZP1 .EQ $2900 *-------------------------------------- -RW.BLOCK .EQ $A00 +RW.BLOCK .EQ $2A00 +RW.ONLINEBUFFER .EQ $2C00 *-------------------------------------- * A2OSX.SYSTEM relocated at $1000 !!! *-------------------------------------- @@ -27,14 +29,25 @@ RWBankSelect .EQ $C073 *-------------------------------------- RW.Init >LDYAI RW.MSG jsr PrintFYA - jsr RW.DetectRAM3 - bcs .10 - >LDYAI RW.MSG.OK + jsr RW.CheckRAM3 + bcs .5 + + >LDYAI RW.MSG.RAM3OK jsr PrintFYA rts -.10 lda #RWBankSelect +.5 jsr RW.DisableRAM + bcc .10 + + >LDYAI RW.MSG.RAMDISKO + jsr PrintFYA + rts + +.10 >LDYAI RW.MSG.RAMDISOK + jsr PrintFYA + + lda #RWBankSelect jsr RW.DetectHW bcc .1 @@ -95,15 +108,80 @@ RW.Init >LDYAI RW.MSG .9 jsr PrintFYA rts *-------------------------------------- -RW.DetectRAM3 jsr MLI - .DA #MLIONLINE - .DA RW.ONLINE +RW.CheckRAM3 jsr RW.ONLINE MLI Online at S3D2 + bcs .9 + + lda RW.ONLINEBUFFER + and #$0F + + cmp #4 'RAM3' ? + sec + bne .9 + + tax + +.1 lda RW.ONLINEBUFFER,x + eor RW.MSG.RAM3OK,x + asl ignore b7 + bne .9 + + dex + bne .1 + + clc +.9 rts +*-------------------------------------- +RW.DisableRAM lda DEVPTRS3D2 + cmp DEVPTRS S0D1=NOVEV + bne .1 + + lda DEVPTRS3D2+1 + cmp DEVPTRS+1 S0D1=NODEV + beq .8 S3D2=NODEV, nothing to do + +.1 ldx DEVCNT + +.2 lda DEVLST,x LOOKING FOR $BF, $BB, $B7, $B3 + and #$F3 + cmp #$B3 + beq .3 + + dex + bpl .2 + + sec No device found, exit with error + rts + +.3 cpx DEVCNT + beq .5 + +.4 lda DEVLST+1,x + sta DEVLST,x + inx + cpx DEVCNT + bne .4 + +.5 ldx DEVCNT + stz DEVLST,x + dec DEVCNT + lda DEVPTRS + sta DEVPTRS3D2 + lda DEVPTRS+1 + sta DEVPTRS3D2+1 + + jsr RW.ONLINE + +.8 clc Success!! rts *-------------------------------------- -RW.ONLINE .DA #2 +RW.ONLINE jsr MLI + .DA #MLIONLINE + .DA RW.ONLINEPARAM + rts +*-------------------------------------- +RW.ONLINEPARAM .DA #2 .DA #$B0 Slot 3,Drive 2 .DA RW.ONLINEBUFFER -RW.ONLINEBUFFER .BS 16 *-------------------------------------- RW.DetectHW php sei @@ -414,7 +492,9 @@ RW.BLOCK2.END .EQ * .INB usr/src/shared/x.printf.s *-------------------------------------- RW.MSG .AZ "SuperExpander E, RAMWorks (I,II,III,z-Ram) Driver For A2osX\n" -RW.MSG.OK .AZ "/RAM3 Device Already Installed.\n" +RW.MSG.RAMDISOK .AZ "/RAM Device Disabled/Not Present.\n" +RW.MSG.RAMDISKO .AZ "Problem Disabling /RAM Device.\n" +RW.MSG.RAM3OK .AZ "/RAM3 Device Already Installed.\n" RW.MSG.OK1 .AZ "%D KB Detected (%d Pages), %D KB (%d Pages) Available for RamDrive.\n" RW.MSG.KO1 .AZ "Not Detected.\n" RW.MSG.OK2 .AZ "RamWorks Driver Installed.\n"