diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 38f30e63..6979d4e0 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 116559c1..12e23de2 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 index 26578449..bca77706 100644 Binary files a/.Floppies/ProDOSFX.BOOT.po and b/.Floppies/ProDOSFX.BOOT.po differ diff --git a/BASIC.FX/BASIC.S.A.txt b/BASIC.FX/BASIC.S.A.txt index efe0c3f1..52cca426 100644 --- a/BASIC.FX/BASIC.S.A.txt +++ b/BASIC.FX/BASIC.S.A.txt @@ -900,7 +900,7 @@ LA021 jsr BS.KW.FRE lda #$00 sta BS.MEMSIZE - jmp LA089 Z + bra LA089 Z *-------------------------------------- BS.KW.FRE stz BS.TXTTAB @@ -937,7 +937,7 @@ LA07D lda AS.HIMEM+1 lda AS.HIMEM sta BS.MEMSIZE sta AS.STRINGSTART - +*-------------------------------------- LA089 clc beq LA08D @@ -999,7 +999,7 @@ LA0E0 sta XBBDA LA0F8 lda #BS.E.NOBUFFER LA0FA rts - +*-------------------------------------- LA0FB clc LA0FC lda ZP.A2L @@ -1039,7 +1039,7 @@ LA10E ldy #$00 LA12F clc rts - +*-------------------------------------- LA131 jsr LA160 bcs LA12F @@ -1119,15 +1119,15 @@ LA199 lda XBBD7 ldx XBBD9 inx -LA1AD lda (ZP.PCL),y +.1 lda (ZP.PCL),y sta (ZP.A1L),y iny - bne LA1AD + bne .1 inc ZP.A1H inc ZP.PCH dex - bne LA1AD + bne .1 rts *-------------------------------------- diff --git a/BASIC.FX/BASIC.S.B.txt b/BASIC.FX/BASIC.S.B.txt index fce2d20c..55be1c3a 100644 --- a/BASIC.FX/BASIC.S.B.txt +++ b/BASIC.FX/BASIC.S.B.txt @@ -321,7 +321,7 @@ LA3F2 cmp XBBDC bne LA3E1 beq LA3DB - +*-------------------------------------- LA3FD lda (ZP.A2L),y beq LA410 diff --git a/BASIC.FX/BASIC.S.C.txt b/BASIC.FX/BASIC.S.C.txt index 8f929da3..2a2c902e 100644 --- a/BASIC.FX/BASIC.S.C.txt +++ b/BASIC.FX/BASIC.S.C.txt @@ -967,7 +967,7 @@ LB481 inx dec ZP.PCL bne LB481 -BS.KW.NOMON clc + clc rts *-------------------------------------- BS.CheckFilename @@ -1582,7 +1582,7 @@ BS.KW.ONLINE jsr MON.CROUT pla sta MLI.DEVNUM - clc +BS.KW.NOMON clc rts *-------------------------------------- BS.Expand2.P .DA #1 diff --git a/BASIC.FX/BASIC.S.X.txt b/BASIC.FX/BASIC.S.X.txt new file mode 100644 index 00000000..feaf4964 --- /dev/null +++ b/BASIC.FX/BASIC.S.X.txt @@ -0,0 +1,1374 @@ +NEW + AUTO 3,1 +*-------------------------------------- +ZPXPtr1 .EQ 0 +ZPXPtr2 .EQ 2 +*-------------------------------------- +BSX.JMPX jmp (BSX.JMP,x) + +BSX.JMP +BSX.CheckOpt.X .EQ *-BSX.JMP + .DA BSX.CheckOpt +BSX.GetDecNum.X .EQ *-BSX.JMP + .DA BSX.GetDecNum +BSX.Expand.X .EQ *-BSX.JMP + .DA BSX.Expand +BSX.IsIntCmd.X .EQ *-BSX.JMP + .DA BSX.IsIntCmd +BSX.GetErrA.X .EQ *-BSX.JMP + .DA BSX.GetErrA +BSX.GetMsgY.X .EQ *-BSX.JMP + .DA BSX.GetMsgY +BSX.MkCatLine.X .EQ *-BSX.JMP + .DA BSX.MkCatLine +BSX.MkCatLineF.X .EQ *-BSX.JMP + .DA BSX.MkCatLineF +BSX.Online.X .EQ *-BSX.JMP + .DA BSX.Online +BSX.Mem.X .EQ *-BSX.JMP + .DA BSX.Mem +*-------------------------------------- +BSX.CheckOpt jsr BS.TMPBUF3Reset + + jsr BSX.ToUpper + + ldx BS.ToAUXSaveX + + ldy #$09 + +LA8FB cmp BSX.KW.OPT,y + beq LA935 + + dey + bpl LA8FB + + cmp #'T' + beq LA90A + +LA907 lda #BS.E.SYNTAX + sec + rts + +LA90A lda #CMDBITS0.T + and GP.AllowedBITS + beq LA931 + + tsb GP.FoundBITS + + stz XBC08 + + lda #$12 + sta XBC09 + jsr BS.GetCharSpaceSep + beq LA907 + + cmp #'$' + beq LA984 + + cmp #'A' + bcc LA96E + + jmp BSX.GetFTypeASC + +LA931 lda #BS.E.INVOPT + sec + rts + +LA935 lda BSX.KW.OPT.PBITSLO,y + beq LA955 + + and GP.AllowedBITS+1 + beq LA931 + + cmp #$04 + bne LA94F + + and GP.FoundBITS+1 + bne LA955 + + lda #$01 + sta GP.ParamD + lda #CMDBITS1.SD + +LA94F tsb GP.FoundBITS+1 + +LA955 lda BSX.KW.OPT.PBITSHI,y + and #$03 + sta XBC08 + + lda BSX.KW.OPT.PBITSHI,y + lsr + lsr + sta XBC09 + jsr BS.GetCharSpaceSep + beq LA9BE + + cmp #'$' + beq LA984 + +LA96E stx GP.INPTR + jsr BSX.GetDecDigit + bcc LA97A + + bmi LA9C1 + + bcs LA9BE + +LA97A ldx GP.INPTR + jsr BS.GetCharSpaceSep + bne LA96E + + beq LA99D + +LA984 jsr BS.GetCharSpaceSep + beq LA9BE + +LA989 stx GP.INPTR + jsr BSX.GetHexDigit + bcc LA995 + + bmi LA9C1 + + bcs LA9BE + +LA995 ldx GP.INPTR + jsr BS.GetCharSpaceSep + bne LA989 + +LA99D ldx #$02 +LA99F cpx XBC08 + beq LA9AC + + lda BS.TMPBUF4,x + bne LA9C1 + + dex + bne LA99F + +LA9AC ldy XBC09 +LA9AF lda BS.TMPBUF4,x + sta GP.ParamA,y + dey + dex + bpl LA9AF + + ldx GP.INPTR + clc + rts + +LA9C1 lda #BS.E.RANGE + .HS 2C BIT ABS + +LA9BE lda #BS.E.SYNTAX + sec + rts +*-------------------------------------- +BSX.GetDecNum ldx BS.ToAUXSaveX + bra LA96E +*-------------------------------------- +BSX.GetDecDigit cmp #'0' + bcc LAA72 + + cmp #'9'+1 + bcc LAA76 + +LAA72 sec + ora #$00 + rts + +LAA76 and #$0F + pha + lda BS.TMPBUF4+2 + cmp #$1A + bcs LAAA2 + + ldx #$02 + +LAA82 lda BS.TMPBUF4,x + pha + dex + bpl LAA82 + + jsr BS.TMPBUF3x2 + jsr BS.TMPBUF3x2 + ldx #$00 + clc + +LAA92 pla + adc BS.TMPBUF4,x + sta BS.TMPBUF4,x + inx + txa + eor #$03 + bne LAA92 + + jsr BS.TMPBUF3x2 + +LAAA2 pla + bcs LAAB8 + + adc BS.TMPBUF4 + sta BS.TMPBUF4 + bcc LAABB + + clc + inc BS.TMPBUF4+1 + bne LAABB + + inc BS.TMPBUF4+2 + bne LAABB + +LAAB8 lda #$FF + sec +LAABB rts +*-------------------------------------- +BSX.GetHexDigit cmp #'0' + bcc LAACC + + cmp #'9'+1 + bcc LAAD2 + + cmp #'A' + bcc LAACC + + cmp #'F'+1 + bcc LAAD0 + +LAACC sec + ora #$00 + rts + +LAAD0 sbc #$06 + +LAAD2 and #$0F + ldx #$03 + +LAAD6 jsr BS.TMPBUF3x2 + bcs LAAB8 + + dex + bpl LAAD6 + + ora BS.TMPBUF4 + sta BS.TMPBUF4 + rts +*-------------------------------------- +BSX.KW.OPT .AS "ABEL@DFRVS" +*-------------------------------------- +BSX.WHICHBITS +* .HS 8040201008040201 +BSX.KW.OPT.PBITSLO + .DA #$80 + .DA #$40 + .DA #$20 + .DA #$10 + .DA #$08 + .DA #$04 + .DA #$02 + .DA #$01 + .DA #$00 + .DA #$04 +BSX.KW.OPT.PBITSHI + .DA #$05 + .DA #$12 + .DA #$19 + .DA #$21 + .DA #$45 + .DA #$28 + .DA #$31 + .DA #$39 + .DA #$40 + .DA #$24 +*-------------------------------------- +BSX.GetFTypeASC ldy #$00 + +.1 sta BS.TMPBUF4,y + iny + cpy #$03 + beq .3 + + jsr BS.GetCharSpaceSep + bne .1 + +.2 lda #BS.E.SYNTAX + sec + rts + +.3 stx GP.INPTR + +.4 ldx #$00 + lda XBC08 + cmp #$0F + beq .2 + + asl + adc XBC08 + tay + +.5 lda BS.TMPBUF4,x + eor BSX.PRODOSTYPES.ASC,y + asl + bne .6 + + iny + inx + cpx #$03 + bne .5 + + beq .7 + +.6 inc XBC08 + bne .4 + +.7 lda #$0E + sec + sbc XBC08 + tay + lda BSX.PRODOSTYPES.H,y + sta GP.ParamT + ldx GP.INPTR + + clc + rts +*-------------------------------------- +BSX.Expand stz BSX.Expand.Ptr start at first char of BS.CMDBUF + +.2 jsr BSX.Expand.GetN + beq .8 + + cmp #'.' + bne .6 + + jsr BSX.Expand.GetN + beq .9 + + cmp #'/' /./ ???? discard + beq .2 + + cmp #'.' /.DIR.... + bne .5 + + jsr BSX.Expand.GetN + beq .3 /.. + + cmp #'/' + bne .9 + + ldy MLI.PATHBUF remove /DIR/.. + cpy #1 + beq .9 only / + +.3 dey + lda MLI.PATHBUF,y + cmp #'/' + bne .3 + + sty MLI.PATHBUF + bra .2 + +.5 pha + lda #'.' + jsr BSX.Expand.PutN + pla + +.6 jsr BSX.Expand.PutN + +.7 jsr BSX.Expand.GetN + beq .8 + + jsr BSX.Expand.PutN + + cmp #'/' + bne .7 + + bra .2 + +.8 ldy MLI.PATHBUF + +.80 lda MLI.PATHBUF,y + sta BS.CMDBUF.LEN,y + dey + bpl .80 + + clc + rts + +.9 sec + rts + +BSX.Expand.GetN ldx BSX.Expand.Ptr + cpx BS.CMDBUF.LEN + beq .8 + + inc BSX.Expand.Ptr + lda BS.CMDBUF,x NZ + +.8 rts + +BSX.Expand.PutN inc MLI.PATHBUF + ldy MLI.PATHBUF + sta MLI.PATHBUF,y + rts + +BSX.Expand.Ptr .BS 1 +*-------------------------------------- +BSX.IsIntCmd lda #BSX.IntCmds + sta ZPXPtr1 + + lda /BSX.IntCmds + sta ZPXPtr1+1 + + ldx #36 + stx GP.XCNUM + +.1 ldy #$ff + +.2 iny + lda BS.CMDBUF,y + jsr BSX.ToUpper + eor (ZPXPtr1),y + asl + bne .3 + + bcc .2 + + sty GP.XLEN + + lda GP.XCNUM + asl + tax + + lda BSX.KW.PBITS-2,x + sta GP.AllowedBITS + lda BSX.KW.PBITS-1,x + sta GP.AllowedBITS+1 + + lda BSX.KW.JMP,x + sta BS.KW.JMPADDR + lda BSX.KW.JMP+1,x + sta BS.KW.JMPADDR+1 + + clc + rts + +.3 iny + bcs .4 + + lda (ZPXPtr1),y + asl + bra .3 + +.4 tya + clc + adc ZPXPtr1 + sta ZPXPtr1 + bcc .5 + + inc ZPXPtr1+1 + +.5 dec GP.XCNUM + bne .1 + + sec + rts +*-------------------------------------- +BSX.IntCmds .AT "CD" + .AT "ONLINE" + .AT "MEM" + .AT "MTR" + .AT "-" + .AT "POSITION" + .AT "RESTORE" + .AT "CATALOG" + .AT "VERIFY" + .AT "UNLOCK" + .AT "RENAME" + .AT "PREFIX" + .AT "DELETE" + .AT "CREATE" + .AT "APPEND" + .AT "WRITE" + .AT "STORE" + .AT "NOMON" + .AT "FLUSH" + .AT "CLOSE" + .AT "CHAIN" + .AT "BSAVE" + .AT "BLOAD" + .AT "SAVE" + .AT "READ" + .AT "OPEN" + .AT "LOCK" + .AT "LOAD" + .AT "EXEC" + .AT "BRUN" + .AT "RUN" + .AT "BYE" + .AT "FRE" + .AT "CAT" + .AT "PR#" + .AT "IN#" +*-------------------------------------- +BSX.KW.PBITS .DA $8040 IN + .DA $8040 PR + .DA $0495 CAT + .DA $0000 FRE + .DA $0000 BYE + .DA $0C11 RUN + .DA $F401 BRUN + .DA $0701 EXEC + .DA $0401 LOAD + .DA $0401 LOCK + .DA $142D OPEN + .DA $5321 READ + .DA $0409 SAVE + .DA $F405 BLOAD + .DA $F40D BSAVE + .DA $0C01 CHAIN + .DA $0001 CLOSE + .DA $0001 FLUSH + .DA $0000 NOMON + .DA $0409 STORE + .DA $4321 WRITE + .DA $142D APPEND + .DA $040D CREATE + .DA $0401 DELETE + .DA $0491 PREFIX + .DA $0403 RENAME + .DA $0401 UNLOCK + .DA $0411 VERIFY + .DA $0495 CATALOG + .DA $0401 RESTORE + .DA $0321 POSITION + .DA $0401 DASH + .DA $0000 MTR + .DA $0000 MEM + .DA $0000 ONLINE + .DA $0491 CD +*-------------------------------------- +BSX.KW.JMP .DA BS.KW.EXTERNAL 0 + .DA BS.KW.IN 1 + .DA BS.KW.PR 2 + .DA BS.KW.CAT 3 + .DA BS.KW.FRE 4 + .DA BS.KW.BYE 5 + .DA BS.KW.RUN 6 + .DA BS.KW.BRUN 7 + .DA BS.KW.EXEC 8 + .DA BS.KW.LOAD 9 + .DA BS.KW.LOCK 10 + .DA BS.KW.OPEN 11 + .DA BS.KW.READ 12 + .DA BS.KW.SAVE 13 + .DA BS.KW.BLOAD 14 + .DA BS.KW.BSAVE 15 + .DA BS.KW.CHAIN 16 + .DA BS.KW.CLOSE 17 + .DA BS.KW.FLUSH 18 + .DA BS.KW.NOMON 19 + .DA BS.KW.STORE 20 + .DA BS.KW.WRITE 21 + .DA BS.KW.APPEND 22 + .DA BS.KW.CREATE 23 + .DA BS.KW.DELETE 24 + .DA BS.KW.PREFIX 25 + .DA BS.KW.RENAME 26 + .DA BS.KW.UNLOCK 27 + .DA BS.KW.VERIFY 28 + .DA BS.KW.CATALOG 29 + .DA BS.KW.RESTORE 30 + .DA BS.KW.POSITION 31 + .DA BS.KW.DASH 32 + .DA BS.KW.MTR 33 + .DA BS.KW.MEM 34 + .DA BS.KW.ONLINE 35 + .DA BS.KW.PREFIX 36 (CD) +*-------------------------------------- +BSX.GetErrA tax + ldy BSX.MSG.IDX-2,x + +BSX.GetMSGY ldx #$00 + clc + stz GP.INPTR + +.1 jsr .4 + bne .2 + + jsr .4 + ora #$10 + +.2 tax + lda BSX.TBL6-1,x + beq .3 + + ldx GP.INPTR + sta IO.LINEBUF+1,x + inc GP.INPTR + bne .1 + +.3 rts +*-------------------------------------- +.4 lda BSX.MSG,y + bcs .6 + + beq .5 + + lsr + lsr + lsr + lsr + sec + rts + +.5 iny + lda BSX.MSG,y + sta GP.INPTR + iny + bne .4 + +.6 iny + and #$0F + clc + rts +*-------------------------------------- +* .DA #$00 "Copyright..." (VERIFY with no arg) +* .DA #$10 CATALOG header +* .DA #$36 CATALOG footer +*-------------------------------------- +BSX.MSG.IDX .DA #$54 + .DA #$5B + .DA #$66 + .DA #$6F + .DA #$75 + .DA #$75 + .DA #$7E + .DA #$84 + .DA #$8A + .DA #$91 + .DA #$9B + .DA #$A8 + .DA #$B4 + .DA #$BF + .DA #$C9 + .DA #$D1 + .DA #$D9 + .DA #$E1 + .DA #$EC + .DA #$F3 +*-------------------------------------- +BSX.TBL6 .AS -"ACDEFILMNORTU " + .DA #$00 +*-------------------------------------- + .DA #$00 + .AS -"BGHKPSVWXY/().:" +*-------------------------------------- +BSX.MSG .DA #$2A + .DA #$05 + .DA #$0A + .DA #$B6 + .DA #$02 + .DA #$03 + .DA #$CE + .DA #$10 + .DA #$50 + .DA #$57 + .DA #$4E + .DA #$2A + .DA #$80 + .DA #$5D + .DA #$C4 + .DA #$BF + .DA #$E9 + .DA #$18 + .DA #$4E + .DA #$00 + .DA #$10 + .DA #$C0 + .DA #$A0 + .DA #$54 + .DA #$EE + .DA #$01 + .DA #$7A + .DA #$20 + .DA #$40 + .DA #$6E + .DA #$00 + .DA #$1E + .DA #$8A + .DA #$36 + .DA #$56 + .DA #$43 + .DA #$00 + .DA #$2F + .DA #$2B + .DA #$41 + .DA #$C4 + .DA #$3E + .DA #$00 + .DA #$40 + .DA #$49 + .DA #$35 + .DA #$67 + .DA #$4E + .DA #$06 + .DA #$D0 + .DA #$1C + .DA #$0A + .DA #$05 + .DA #$4F + .DA #$01 + .DA #$7A + .DA #$20 + .DA #$40 + .DA #$6E + .DA #$5B + .DA #$44 + .DA #$0F + .DA #$00 + .DA #$16 + .DA #$01 + .DA #$7A + .DA #$20 + .DA #$40 + .DA #$6E + .DA #$D0 + .DA #$64 + .DA #$30 + .DA #$FE + .DA #$00 + .DA #$2C + .DA #$CA + .DA #$C1 + .DA #$7E + .DA #$01 + .DA #$7A + .DA #$20 + .DA #$40 + .DA #$60 + .DA #$FF + .DA #$B1 + .DA #$90 + .DA #$24 + .DA #$E4 + .DA #$BB + .DA #$AB + .DA #$F0 + .DA #$9A + .DA #$E3 + .DA #$40 + .DA #$76 + .DA #$24 + .DA #$E2 + .DA #$A9 + .DA #$94 + .DA #$2C + .DA #$43 + .DA #$F0 + .DA #$08 + .DA #$B6 + .DA #$C4 + .DA #$E0 + .DA #$5B + .DA #$AC + .DA #$42 + .DA #$C4 + .DA #$3F + .DA #$49 + .DA #$3E + .DA #$A5 + .DA #$E3 + .DA #$1C + .DA #$1F + .DA #$05 + .DA #$1C + .DA #$03 + .DA #$E9 + .DA #$AC + .DA #$E5 + .DA #$AD + .DA #$93 + .DA #$F0 + .DA #$60 + .DA #$BA + .DA #$E4 + .DA #$BB + .DA #$AB + .DA #$F0 + .DA #$36 + .DA #$06 + .DA #$04 + .DA #$E5 + .DA #$D7 + .DA #$7F + .DA #$56 + .DA #$74 + .DA #$E7 + .DA #$A2 + .DA #$04 + .DA #$43 + .DA #$F0 + .DA #$69 + .DA #$07 + .DA #$17 + .DA #$63 + .DA #$E0 + .DA #$51 + .DA #$B1 + .DA #$84 + .DA #$C4 + .DA #$BF + .DA #$9A + .DA #$E0 + .DA #$1D + .DA #$55 + .DA #$4B + .DA #$06 + .DA #$E1 + .DA #$07 + .DA #$16 + .DA #$71 + .DA #$01 + .DA #$74 + .DA #$F0 + .DA #$56 + .DA #$74 + .DA #$EC + .DA #$0A + .DA #$05 + .DA #$4E + .DA #$86 + .DA #$06 + .DA #$81 + .DA #$C2 + .DA #$03 + .DA #$F0 + .DA #$05 + .DA #$BA + .DA #$02 + .DA #$B1 + .DA #$8E + .DA #$CA + .DA #$AE + .DA #$71 + .DA #$B0 + .DA #$24 + .DA #$F0 + .DA #$9A + .DA #$CE + .DA #$36 + .DA #$B4 + .DA #$2C + .DA #$E2 + .DA #$A8 + .DA #$81 + .DA #$93 + .DA #$F0 + .DA #$06 + .DA #$0A + .DA #$9C + .DA #$10 + .DA #$9E + .DA #$4B + .DA #$BA + .DA #$BF + .DA #$36 + .DA #$B4 + .DA #$2C + .DA #$AB + .DA #$0A + .DA #$E5 + .DA #$D7 + .DA #$7F + .DA #$56 + .DA #$74 + .DA #$E9 + .DA #$AC + .DA #$EA + .DA #$05 + .DA #$49 + .DA #$F0 + .DA #$3D + .DA #$05 + .DA #$76 + .DA #$21 + .DA #$C4 + .DA #$E5 + .DA #$67 + .DA #$4E + .DA #$91 + .DA #$84 + .DA #$F0 + .DA #$56 + .DA #$74 + .DA #$E0 + .DA #$1D + .DA #$06 + .DA #$0A + .DA #$F0 + .DA #$56 + .DA #$74 + .DA #$0C + .DA #$06 + .DA #$0D + .DA #$E0 + .DA #$6C + .DA #$67 + .DA #$7E + .DA #$A0 + .DA #$54 + .DA #$9F +*-------------------------------------- +BSX.Online jsr BS.LINEBUFCLR80 + + lda #39 + sta BS.CATWIDTH + + lda #"S" + sta IO.LINEBUF+1 + lda #"D" + sta IO.LINEBUF+3 + + lda GP.MLIMRKEOFBUF.REFNUM + asl + php + lsr + lsr + lsr + lsr + lsr + ora #$B0 + sta IO.LINEBUF+2 + + lda #$B0 + plp + adc #1 + sta IO.LINEBUF+4 + + ldx BS.CMDBUF.LEN + +.2 lda BS.CMDBUF.LEN,x + ora #$80 + sta IO.LINEBUF+5,x + dex + bne .2 + + lda GP.FIBLOKS + ldx GP.FIBLOKS+1 + ldy #28 + jsr BSX.AXDEC2LINEBUFY + + lda #"/" + sta IO.LINEBUF+30 + + lda GP.FIAUXTYPE + ldx GP.FIAUXTYPE+1 + ldy #34 + jsr BSX.AXDEC2LINEBUFY + + clc + rts +*-------------------------------------- +BSX.Mem ldx #16+14 + stx BS.CATWIDTH + + ldx #0 + + asl + pha + asl + asl + asl + tay + +.1 lda BS.MEM.MSG1,y + sta IO.LINEBUF+1,x + + lda BS.MEM.MSG2,x + sta IO.LINEBUF+17,x + iny + inx + cpx #16 + bne .1 + + ply + + ldx $261,y + phx + lda $260,y + pha + + ldy #20 + jsr BSX.AXDEC2LINEBUFY + + pla + ldy #27 + jsr BSX.AHEX2LINEBUFY + + pla + ldy #25 + jsr BSX.AHEX2LINEBUFY + + clc + rts +*-------------------------------------- +BS.MEM.MSG1 .AS -"Program Start : " + .AS -"Var Start : " + .AS -"Array Start : " + .AS -"Array End : " + .AS -"String Start : " + .AS -"Himem : " + +BS.MEM.MSG2 .AS -" ( ) " +*-------------------------------------- +BSX.MkCatLine jsr BS.LINEBUFCLR80 + lda #$A2 + sta IO.LINEBUF + lda DIRENTBUF + and #$0F + tay + +LA4E0 lda DIRENTBUF,y + ora #$80 + sta IO.LINEBUF+1,y + dey + bne LA4E0 + + .DO LOWERCASE=1 + lda DIRENTBUF+$1D + bpl .18 + + lda DIRENTBUF + and #$0f + tay + +.10 cpy #8 + bcs .13 + + lda DIRENTBUF+$1D + and BSX.WHICHBITS,y + beq .15 + + bne .14 + +.13 lda DIRENTBUF+$1C + and BSX.WHICHBITS-8,y + beq .15 + +.14 lda IO.LINEBUF+1,y + eor #$20 + sta IO.LINEBUF+1,y + +.15 dey + bne .10 + +.18 .FIN + + stz BS.TMPBUF4+2 + + lda DIRENTBUF.TYPE + ldx #$0E + +LA4F3 iny + iny + cmp BSX.PRODOSTYPES.H,x + beq LA505 + + iny + dex + bpl LA4F3 + + ldy #$13 + jsr BSX.AHEX2LINEBUFY + bne LA549 + +LA505 ldx #$02 + pha + +LA508 lda BSX.PRODOSTYPES.ASC,y + sta $212,x + dey + dex + bpl LA508 + + pla + bit BS.CATWIDTH + bvc LA561 + + ldy #$4E + cmp #$06 + beq LA533 + + cmp #$04 + bne LA549 + + lda #$D2 + sta $249 + lda DIRENTBUF.AUXT + ldx DIRENTBUF.AUXT+1 + jsr BSX.AXDEC2LINEBUFY + bra LA544 + +LA533 lda #$C1 + sta $249 + lda DIRENTBUF.AUXT + jsr BSX.AHEX2LINEBUFY + lda DIRENTBUF.AUXT+1 + jsr BSX.AHEX2LINEBUFY + +LA544 lda #$BD + sta $24A + +LA549 lda DIRENTBUF.EOF+2 + sta BS.TMPBUF4+2 + lda DIRENTBUF.EOF + ldx DIRENTBUF.EOF+1 + ldy #$46 + jsr BSX.AXDEC2LINEBUFY + ldx #$18 + ldy #$3D + jsr LA57E + +LA561 ldy #$1B + lda DIRENTBUF.UBLK + ldx DIRENTBUF.UBLK+1 + jsr BSX.AXDEC2LINEBUFY + lda DIRENTBUF.ACCESS + and #$C2 + cmp #$C2 + beq LA57A + + lda #$AA + sta IO.LINEBUF+1 + +LA57A ldx #$21 + ldy #$2C + +LA57E lda $25A,x + lsr + sta XBC10 + lda DIRENTBUF,x + pha + and #$1F + sta XBC0F + pla + rol + rol + rol + rol + and #$0F + beq LA5B1 + + cmp #$0D + bcs LA5B1 + + sta XBC0E + asl + adc XBC0E + sta XBC0E + lda XBC0F + beq LA5B1 + + lda XBC10 + cmp #$64 + bcc LA5C3 + +LA5B1 tya + sec + sbc #$06 + tay + ldx #$08 + +LA5B8 lda BSX.NODATE,x + sta IO.LINEBUF+1,y + dey + dex + bpl LA5B8 + + rts + +LA5C3 lda $25C,x + pha + lda $25B,x + ldx #$00 + cmp #$3C + bcc LA5D1 + + txa + +LA5D1 jsr LA618 + lda #$BA + sta IO.LINEBUF+1,y + dey + pla + ldx #$00 + cmp #$18 + bcc LA5E2 + + txa + +LA5E2 cmp #$0A + php + jsr BSX.AXDEC2LINEBUFY + plp + bcs LA5EC + + dey + +LA5EC dey + lda XBC10 + jsr LA618 + dey + ldx XBC0E + inx + inx + inx + +LA5FA lda BSX.MONTHS-4,x + sta IO.LINEBUF+1,y + dey + dex + cpx XBC0E + bne LA5FA + + lda #$AD + sta IO.LINEBUF+1,y + sta $205,y + dey + lda XBC0F + ldx #$00 + jmp BSX.AXDEC2LINEBUFY + +LA618 clc + adc #$64 + jsr BSX.AXDEC2LINEBUFY + iny + rts +*-------------------------------------- +BSX.MONTHS .AS -"JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC" +BSX.NODATE .AS -"" +*-------------------------------------- +BSX.MkCatLineF jsr BS.LINEBUFCLR80 + + ldy #$36 + jsr BSX.GetMSGY + + jsr BS.TMPBUF3Reset + lda GP.FIAUXTYPE + ldx GP.FIAUXTYPE+1 + ldy #$3D + jsr BSX.AXDEC2LINEBUFY + lda GP.FIBLOKS + ldx GP.FIBLOKS+1 + ldy #$26 + jsr BSX.AXDEC2LINEBUFY + lda GP.FIAUXTYPE + sec + sbc GP.FIBLOKS + pha + lda GP.FIAUXTYPE+1 + sbc GP.FIBLOKS+1 + tax + pla + ldy #$10 + jsr BSX.AXDEC2LINEBUFY + + clc + rts +*-------------------------------------- +BSX.AHEX2LINEBUFY + pha + and #$0F + jsr LA62B + pla + lsr + lsr + lsr + lsr + +LA62B ora #$B0 + cmp #$BA + bcc LA633 + + adc #$06 + +LA633 sta IO.LINEBUF+1,y + dey + lda #$A4 + sta IO.LINEBUF+1,y + rts +*-------------------------------------- +BSX.AXDEC2LINEBUFY + stx BS.TMPBUF4+1 + sta BS.TMPBUF4 + +.1 jsr .2 + + lda BS.TMPBUF4+3 + ora #$B0 + sta IO.LINEBUF+1,y + dey + lda BS.TMPBUF4 + ora BS.TMPBUF4+1 + ora BS.TMPBUF4+2 + bne .1 + + rts + +.2 ldx #$18 + lda #$00 + sta BS.TMPBUF4+3 + +.3 jsr BS.TMPBUF3x2 + rol BS.TMPBUF4+3 + sec + lda BS.TMPBUF4+3 + sbc #$0A + bcc .4 + + sta BS.TMPBUF4+3 + inc BS.TMPBUF4 + +.4 dex + bne .3 + + rts +*-------------------------------------- +BSX.PRODOSTYPES.H + .DA #$FF + .DA #$FE + .DA #$FD + .DA #$FC + .DA #$FB + .DA #$FA + .DA #$F0 + .DA #$0F + .DA #$06 + .DA #$04 + .DA #$EF + .DA #$1A + .DA #$1B + .DA #$19 + .DA #$B3 +BSX.PRODOSTYPES.ASC + .AS -"S16ADBASPAWPPASTXTBINDIRCMDINTIVRBASVARRELSYS" +*-------------------------------------- +BSX.ToUpper cmp #'a' + bcc .9 + + cmp #'z'+1 + bcs .9 + + eor #$20 + +.9 rts +*-------------------------------------- + .LIST ON +BSX.SIZE .EQ *-BSX.JMPX + .LIST OFF + + .BS $F000-* +*-------------------------------------- +MAN +SAVE usr/src/basic.fx/basic.s.x +LOAD usr/src/basic.fx/basic.s +ASM diff --git a/BIN/IRC.S.TLS.txt b/BIN/IRC.S.TLS.txt new file mode 100644 index 00000000..90ec01fc --- /dev/null +++ b/BIN/IRC.S.TLS.txt @@ -0,0 +1,131 @@ +NEW + AUTO 3,1 +*-------------------------------------- +CS.RUN.TLS jsr CS.RUN.TLS.init + + >PUSHB hSocket + >PUSHW L.TLS.CHELLO + >PUSHWI TLS.CHELLO.L + >LIBCALL hLIBTCPIP,LIBTCPIP.Write + bcs .9 + + lda #TIMEOUT.MAX + sta TimeOut + +.1 jsr CS.RUN.TLS.Read + bcc .2 + + ldx TimeOut + bne .1 + + lda #MLI.E.IO + bra .9 + +.2 + >DEBUG + + bra .1 + + + + + +.9 pha + >LDYA L.MSG.TLSKO + >SYSCALL PutS + pla + sec + rts +*-------------------------------------- +CS.RUN.TLS.init >LDYA L.MSG.TLS + >SYSCALL PutS + + lda A2osX.RANDOM16 + sta ZPPtr1 + lda A2osX.RANDOM16+1 + and #$7F + sta ZPPtr1+1 + + >LDYA L.TLS.CHELLO.UT + >STYA ZPPtr2 + + ldy #31 + +.10 lda (ZPPtr1),y + sta (ZPPtr2),y + dey + bpl .10 + + lda #50 + sta TimeOut + + rts +*-------------------------------------- +CS.RUN.TLS.Read >SLEEP + + >PUSHB hSocket + >PUSHW ZPBufPtr + >PUSHWI 11 + >LIBCALL hLIBTCPIP,LIBTCPIP.Read + bcs .99 + + cpy #11 + bne .9 + + ldy #TLS.HDR.L-1 + +.1 lda (ZPBufPtr),y + cmp TLS.HDR,y + bne .9 + + dey + bpl .1 + + >PUSHW L.MSG.TLS.HDR + ldy #TLS.LENGTH + lda (ZPBufPtr),y + >PUSHA + iny + lda (ZPBufPtr),y + >PUSHA + + ldy #TLS.HS.MT + lda (ZPBufPtr),y + >PUSHA + + >PUSHBI 3 + >SYSCALL PrintF + + >SLEEP + + >PUSHB hSocket + >PUSHW ZPBufPtr + ldy #TLS.LENGTH+1 + lda (ZPBufPtr),y + sec + sbc #6 + tax + + dey + lda (ZPBufPtr),y + sbc #0 + >PUSHA + + txa + >PUSHA + + >LIBCALL hLIBTCPIP,LIBTCPIP.Read + bcs .99 + + >STYA ZPPtr2 RCVD len + +.99 rts + +.9 lda #MLI.E.IO + sec + rts +*-------------------------------------- +MAN +SAVE usr/src/bin/irc.s.tls +LOAD usr/src/bin/irc.s +ASM diff --git a/BIN/IRC.S.txt b/BIN/IRC.S.txt index 1f83b39b..9bc97ea4 100644 --- a/BIN/IRC.S.txt +++ b/BIN/IRC.S.txt @@ -5,11 +5,12 @@ NEW .OR $2000 .TF bin/irc *-------------------------------------- -TLS .EQ 0 +TLS .EQ 1 *-------------------------------------- .INB inc/macros.i .INB inc/a2osx.i .INB inc/mli.i + .INB inc/mli.e.i .INB inc/eth.i .INB inc/libtcpip.i .DO TLS=1 @@ -120,7 +121,7 @@ J.ESC .DA CS.RUN.CHARIN.LEFT .DA CS.RUN.CHARIN.RIGHT .DO TLS=1 L.MSG.TLS .DA MSG.TLS -L.MSG.TLS.1 .DA MSG.TLS.1 +L.MSG.TLS.HDR .DA MSG.TLS.HDR L.MSG.TLSKO .DA MSG.TLSKO L.TLS.CHELLO .DA TLS.CHELLO L.TLS.CHELLO.UT .DA TLS.CHELLO.UT @@ -283,7 +284,7 @@ CS.RUN.CheckArgs rts *-------------------------------------- CS.RUN.GetBuffers - >LDYAI 2048 + >LDYAI 5120 >SYSCALL GetMem bcs .9 @@ -353,73 +354,6 @@ CS.RUN.Connect >PUSHBI S.SOCKET.T.STREAM >PUSHBI 0 >SYSCALL PrintF rts -*-------------------------------------- - .DO TLS=1 -CS.RUN.TLS jsr CS.RUN.TLS.init - - >PUSHB hSocket - >PUSHW L.TLS.CHELLO - >PUSHWI TLS.CHELLO.L - >LIBCALL hLIBTCPIP,LIBTCPIP.Write - bcs .9 - - lda #TIMEOUT.MAX - sta TimeOut - -.1 >SLEEP - - >PUSHB hSocket - >PUSHW ZPBufPtr - >PUSHWI 2048 - >LIBCALL hLIBTCPIP,LIBTCPIP.Read - bcc .2 - - ldx TimeOut - bne .1 - - bra .9 - -.2 >STYA ZPPtr2 RCVD len - >PUSHW L.MSG.TLS.1 - >PUSHW ZPPtr2 - >PUSHBI 2 - >SYSCALL PrintF - - sec - rts - -.9 pha - >LDYA L.MSG.TLSKO - >SYSCALL PutS - pla - sec - rts -*-------------------------------------- -CS.RUN.TLS.init >LDYA L.MSG.TLS - >SYSCALL PutS - - lda A2osX.RANDOM16 - sta ZPPtr1 - lda A2osX.RANDOM16+1 - and #$7F - sta ZPPtr1+1 - - >LDYA L.TLS.CHELLO.UT - >STYA ZPPtr2 - - ldy #31 - -.10 lda (ZPPtr1),y - sta (ZPPtr2),y - dey - bpl .10 - - lda #50 - sta TimeOut - - rts - - .FIN *-------------------------------------- CS.RUN.Register >LDYA L.MSG.REGISTER jsr CS.RUN.STATUSMSG @@ -1091,6 +1025,10 @@ CS.QUIT ldy #hOutputBuf >SYSCALL FreeMem .8 rts +*-------------------------------------- + .DO TLS=1 + .INB usr/src/bin/irc.s.tls + .FIN *-------------------------------------- CS.END LIBTCPIP .AZ "libtcpip" @@ -1104,7 +1042,7 @@ MSG.SKTOK .AZ "Connected\r\n(Exit key is Ctrl-T)\r\n" MSG.SKTERR .AZ "Socket Error : $%h\r\n" .DO TLS=1 MSG.TLS .AZ "TLS:Negociation..." -MSG.TLS.1 .AZ "TLS:Received %D bytes.\r\n" +MSG.TLS.HDR .AZ "TLS:Received %D bytes, Message Type:%h.\r\n" MSG.TLSKO .AZ "TLS:Negotiation failed." .FIN MSG.REGISTER .AZ "Registering User..." @@ -1184,6 +1122,11 @@ TLS.CHELLO.L .EQ *-TLS.CHELLO TLS.CHELLO.L1 .EQ *-TLS.CHELLO.1 TLS.CHELLO.L2 .EQ *-TLS.CHELLO.2 TLS.CHELLO.LE .EQ *-TLS.CHELLO.E +*-------------------------------------- +TLS.HDR .DA #TLS.CT.HS + .DA TLS.LV.TLS12 +TLS.HDR.L .EQ *-TLS.HDR +*-------------------------------------- .FIN *-------------------------------------- .DUMMY diff --git a/INC/IO.D2.I.txt b/INC/IO.D2.I.txt index 58bc5848..df116cb2 100644 --- a/INC/IO.D2.I.txt +++ b/INC/IO.D2.I.txt @@ -2,10 +2,10 @@ NEW AUTO 3,1 *-------------------------------------- IO.D2.SeekTimeR .EQ 45 LIBBLKDEV Recalibration -IO.D2.SeekTimeF .EQ 30 LIBBLKDEV Track Formatter -IO.D2.SeekTimeB .EQ 30 LIBBLKDEV Boot Block -IO.D2.SeekTimeP .EQ 30 ProDOS.FX initial -IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128 +IO.D2.SeekTimeF .EQ 56 LIBBLKDEV Track Formatter +IO.D2.SeekTimeB .EQ 56 LIBBLKDEV Boot Block +IO.D2.SeekTimeP .EQ 28 ProDOS.FX initial +IO.D2.SeekTimeI .EQ 14 ProDOS.FX increment -> until > 128 *-------------------------------------- IO.D2.Ph0Off .EQ $C080 IO.D2.Ph0On .EQ $C081 diff --git a/LIB/LIBBLKDEV.S.BB.txt b/LIB/LIBBLKDEV.S.BB.txt index 1f88a0fe..d2c1792c 100644 --- a/LIB/LIBBLKDEV.S.BB.txt +++ b/LIB/LIBBLKDEV.S.BB.txt @@ -393,12 +393,11 @@ BB.Seek lda BB.HdrTrk get track we're on lda #0 jsr BB.Wait100usecA + lda IO.D2.Ph0Off,y bcc .11 lda IO.D2.Ph0Off,x - nop - nop -.11 lda IO.D2.Ph0Off,y +.11 *-------------------------------------- BB.Read ldx BB.Slotn0 diff --git a/LIB/LIBBLKDEV.S.D2.txt b/LIB/LIBBLKDEV.S.D2.txt index 87800d89..32b38c8b 100644 --- a/LIB/LIBBLKDEV.S.D2.txt +++ b/LIB/LIBBLKDEV.S.D2.txt @@ -136,14 +136,12 @@ D2.MoveHead.SEI lda D2.CurrentQTrack jsr D2.Wait25600usec + lda IO.D2.Ph0Off,y bcc .90 lda IO.D2.Ph0Off,x - nop - nop -.90 lda IO.D2.Ph0Off,y - - rts + +.90 rts *-------------------------------------- D2.SeekPhOnY and #6 ora D2.Slotn0 diff --git a/ProDOS.FX/ProDOS.S.LDR.txt b/ProDOS.FX/ProDOS.S.LDR.txt index 1442427d..3498f309 100644 --- a/ProDOS.FX/ProDOS.S.LDR.txt +++ b/ProDOS.FX/ProDOS.S.LDR.txt @@ -24,7 +24,7 @@ LDR.MSG.IIe .AT "//e" LDR.MSG.IIc .AT "//c" LDR.MSG.IIgs .AT "IIgs" LDR.MSG.Unknown .AT "Unknown" -LDR.MSG.CLK .AT "XClk" +LDR.MSG.CLK .AT "?Clk" LDR.MSG.RAM .AT "/RAM" LDR.MSG.ROOTERR .AT "ERR reading CATALOG" *-------------------------------------- @@ -430,7 +430,7 @@ LDR.ClkDevDCLK php ldy PAKME.DCLK+1 jmp LDR.SetupCLK -.9 cld +.9 cld *-------------------------------------- LDR.ClkDevNCLK php sei @@ -520,7 +520,7 @@ LDR.ClkDevNCLK php bra LDR.SetupCLK *-------------------------------------- LDR.ClkDevTCLK jsr LDR.IsIIc - bcs .9 + bcs LDR.ClkDevXCLK stz idxl lda #$C1 @@ -532,11 +532,6 @@ LDR.ClkDevTCLK jsr LDR.IsIIc .1 jsr LDR.CheckTClkID bcs .7 -* sta SETPAGE2 -* stz $478,x -* stz $7f8,x - -* sta CLRPAGE2 stz $478,x stz $7f8,x @@ -568,8 +563,31 @@ LDR.ClkDevTCLK jsr LDR.IsIIc lda idxl+1 cmp #$C8 bne .1 +*-------------------------------------- +LDR.ClkDevXCLK bit RROMBNK2 + sta $C070 + bit $FACA + bit $FACA + bit $FAFE + + lda $DFFE + cmp #$4A + bne .9 + + lda $DFFF + cmp #$CD + bne .9 + + lda $D8F0 + bit $F851 + cmp #$AD + beq .1 .9 rts + +.1 lda #'X' + ldx PAKME.XCLK + ldy PAKME.XCLK+1 *-------------------------------------- LDR.SetupCLK stx ZPInBufPtr sty ZPInBufPtr+1 diff --git a/ProDOS.FX/ProDOS.S.XCLK.txt b/ProDOS.FX/ProDOS.S.XCLK.txt new file mode 100644 index 00000000..2c20cd1f --- /dev/null +++ b/ProDOS.FX/ProDOS.S.XCLK.txt @@ -0,0 +1,100 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* Driver For ROMXce Clock +*-------------------------------------- +* we can safely use $200, PCL/H, AIL/H (used by TCLK) +*-------------------------------------- +XCLK.API.RTCBUF .EQ $2B0 +XCLK.API.WRCLK .EQ $C803 +XCLK.API.RDCLK .EQ $C806 +*-------------------------------------- +XCLK.START php + sei + ldx #XCLK.START2xx.L + +.1 lda XCLK.START2xx,X + sta XCLK.CODE2xx,X + dex + bpl .1 + + jsr XCLK.CODE2xx +* Minutes + lda XCLK.API.RTCBUF+1 + and #%01111111 59 + jsr XCLK.BCD2BIN + sta TIMELO +* Hour + lda XCLK.API.RTCBUF+2 + and #%00111111 23 + jsr XCLK.BCD2BIN + sta TIMELO+1 +* Day + lda XCLK.API.RTCBUF+4 + and #%00111111 31 + jsr XCLK.BCD2BIN + sta DATELO +* Year + lda XCLK.API.RTCBUF+6 99 + jsr XCLK.BCD2BIN + sta DATELO+1 +* Month + lda XCLK.API.RTCBUF+5 + and #%00011111 12 + jsr XCLK.BCD2BIN + asl + asl + asl + asl + asl + tsb DATELO + rol DATELO+1 + + plp + rts + +XCLK.BCD2BIN tax + and #$F0 + lsr CC + sta PCL temp location + lsr CC + lsr CC + adc PCL + sta PCL + + txa +* clc + and #$0F + adc PCL + + rts + +XCLK.START2xx bit RROMBNK2 + sta $C070 + bit $FACA + bit $FACA + bit $FAFE + jsr XCLK.API.RDCLK + bit $F851 + bit RRAMWRAMBNK1 + bit RRAMWRAMBNK1 + rts + +XCLK.START2xx.L .EQ *-XCLK.START2xx +*-------------------------------------- +XCLK.CODE2xx .EQ XCLK.API.RTCBUF-XCLK.START2xx.L +*-------------------------------------- + .LIST ON +XCLK.LEN .EQ *-XCLK.START + .LIST OFF +*-------------------------------------- +* CONTROL SECTION : +*-------------------------------------- + .DO XCLK.LEN>125 + ERROR:XCLK Driver too big + .FIN +*-------------------------------------- +MAN +SAVE usr/src/prodos.fx/prodos.s.xclk +LOAD usr/src/prodos.fx/prodos.s +ASM diff --git a/ProDOS.FX/ProDOS.S.XRW.txt b/ProDOS.FX/ProDOS.S.XRW.txt index a39c5b37..d74b0515 100644 --- a/ProDOS.FX/ProDOS.S.XRW.txt +++ b/ProDOS.FX/ProDOS.S.XRW.txt @@ -568,7 +568,7 @@ XRW.Wait100usec lda #1 XRW.Wait100usecA phx -.1 ldx #18 (2) +.1 ldx #20 (2) .2 dex (2) bne .2 (3) @@ -836,15 +836,13 @@ XRW.SeekYA sta XRW.D2Trk-1,x will be current track at the end jsr XRW.Wait25600usec + lda IO.D2.Ph0Off,y bcc .90 lda IO.D2.Ph0Off,x - nop clc Exit wit CC (recalibrate) -.90 lda IO.D2.Ph0Off,y - - rts +.90 rts *-------------------------------------- XRW.SeekPhOnY and #6 ora A2L diff --git a/ProDOS.FX/ProDOS.S.txt b/ProDOS.FX/ProDOS.S.txt index 9c52bba7..e64ca3fb 100644 --- a/ProDOS.FX/ProDOS.S.txt +++ b/ProDOS.FX/ProDOS.S.txt @@ -220,6 +220,7 @@ 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 @@ -289,6 +290,12 @@ TCLK.PAK .DA #0 .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 @@ -309,7 +316,7 @@ SEL2.PAK .DA #0 *-------------------------------------- .AS "PAKME" TAG .DA $2000 BIN ORG - .DA #13 Chunk Count + .DA #14 Chunk Count .DA PAKME.Table Chunks *-------------------------------------- MAN diff --git a/SYS/PM.VEDRIVE.S.BK.txt b/SYS/PM.VEDRIVE.S.BK.txt new file mode 100644 index 00000000..301e8053 --- /dev/null +++ b/SYS/PM.VEDRIVE.S.BK.txt @@ -0,0 +1,408 @@ +NEW + AUTO 3,1 +*-------------------------------------- +* Drivers +*-------------------------------------- +* OP = 2 : Write drv1 +* OP = 3 : Read drv1 +* OP = 4 : Write drv2 +* OP = 5 : Read drv2 +* CMD = $C5+OP+BLKLO+BLKHI+CHKSUM +* DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS +* reuses them after Block operation +* A1,A2 are used by Disk II Driver, +* so we use it safely as Tmp Ptr +*-------------------------------------- +DRV.A1L .EQ $3C +DRV.A1H .EQ $3D +DRV.A2L .EQ $3E +DRV.A2H .EQ $3F +DRV.COMMAND .EQ $42 +DRV.UNITNUM .EQ $43 +DRV.BUFF .EQ $44 +DRV.BLKNUM .EQ $46 +*-------------------------------------- +DRV.BLK .PH DRV.BLK.START Main LC Bnk 2 $D001->$DFFF + +DRV.BLK.1 lda DRV.COMMAND S=0,R=1,W=2,F=3 + bne .1 + + bit DRV.UNITNUM return Status + bmi .3 + + ldx DRV.D1TotalBlks + ldy DRV.D1TotalBlks+1 + bra .8 + +.3 ldx DRV.D2TotalBlks + ldy DRV.D2TotalBlks+1 + +.8 lda #0 + clc + rts + +.1 cmp #3 + beq .8 Format .... + + bcs DRV.BLK.CMD.ERR more....IO error + + ora #2 W=2,R=3 + ldy DRV.UNITNUM + bpl .2 + + adc #2 CC from bcs + +.2 sta DRV.UDPBuf.Cmd store cmd + eor #ADT.CMD.VSD + eor DRV.BLKNUM + eor DRV.BLKNUM+1 + sta DRV.UDPBuf.Sum Compute & store CheckSum + + lda DRV.BLKNUM + sta DRV.UDPBuf.BlkL + lda DRV.BLKNUM+1 + sta DRV.UDPBuf.BlkH +*-------------------------------------- + lda DRV.COMMAND + dec 1-1=0 if read + bne DRV.BLK.CMD.W go write +*-------------------------------------- +* Read block +*-------------------------------------- +DRV.BLK.CMD.R >LDYAI S.UDP+5 + jsr DRV.NIC.SendUDP + bcs DRV.BLK.CMD.ERR + + jsr DRV.BLK.GetFrame + bcs .9 + + ldy #DRV.R200.L + +.6 lda DRV.R200-1,y + sta $200-1,y + dey + bne .6 + + inc DRV.BUFF+1 + + jsr $200 + + dec DRV.R200.DEC + dec DRV.BUFF+1 + + jsr $200 + + + + + + clc +.9 rts + +DRV.BLK.CMD.ERR lda #MLI.E.IO + sec + rts +*-------------------------------------- +* Write Block +*-------------------------------------- +DRV.BLK.CMD.W ldy #DRV.W200.L + +.1 lda DRV.W200-1,y + sta $200-1,y + dey + bne .1 + + inc DRV.BUFF+1 + + stz DRV.UDPBuf.Data+512 + + jsr $200 + + dec DRV.W200.DEC + dec DRV.BUFF+1 + + jsr $200 + + >LDYAI S.UDP+5+512+1 + jsr DRV.NIC.SendUDP + + bcs DRV.BLK.CMD.ERR + + jsr DRV.BLK.GetFrame + bcs .9 + + + + + + + clc +.9 rts +*-------------------------------------- +DRV.BLK.GetFrame + stz DRV.TimeOut + +.1 lda VBL + +.2 pha + jsr DRV.NIC.Rcvd + pla + bcc .3 + + eor VBL + bpl .2 + + dec DRV.TimeOut + bne .1 + + lda #MLI.E.IO +* sec + rts + +.3 jsr DRV.BLK.CheckFrame + bcs .1 + + rts +*-------------------------------------- +DRV.BLK.CheckFrame + lda DRV.InBuf+S.ETH.EII.TYPE + cmp /S.ETH.EII.TYPE.IP + bne .9 + + lda DRV.InBuf+S.ETH.EII.TYPE+1 + cmp #S.ETH.EII.TYPE.IP + beq .4 + + cmp #S.ETH.EII.TYPE.ARP + bne .9 + + lda DRV.InBuf+S.ARP.OPERATION+1 + + cmp #S.ARP.OPERATION.REQ + bne .9 + + ldx #3 + +.1 lda DRV.InBuf+S.ARP.SPA,x + cmp DRV.UDPBuf+S.IP.DST,x + bne .9 + + dex + bpl .1 + + jsr DRV.NIC.SendARP + +.9 sec + rts + +.4 lda DRV.InBuf+S.IP.PROTOCOL + cmp #S.IP.PROTOCOL.UDP + bne .9 + + ldx #3 + +.5 lda DRV.InBuf+S.IP.SRC,x + cmp DRV.UDPBuf+S.IP.DST,x + bne .9 + + lda DRV.InBuf+S.IP.DST,x + cmp DRV.UDPBuf+S.IP.SRC,x + bne .9 + + dex + bpl .5 + + lda DRV.InBuf+S.TCPUDP.SRCPORT + cmp DRV.UDPBuf+S.TCPUDP.DSTPORT + bne .9 + + lda DRV.InBuf+S.TCPUDP.SRCPORT+1 + cmp DRV.UDPBuf+S.TCPUDP.DSTPORT+1 + bne .9 + + clc + rts +*-------------------------------------- +DRV.BLK.IPUDPCheksum + stz DRV.UDPBuf+S.IP.HDR.CHECKSUM + stz DRV.UDPBuf+S.IP.HDR.CHECKSUM+1 + + stz DRV.CheckSum + stz DRV.CheckSum+1 + + lda DRV.FrameSize + sec + sbc #S.ETH.EII + sta DRV.UDPBuf+S.IP.TOTAL.LENGTH+1 + + lda DRV.FrameSize+1 + sbc /S.ETH.EII + sta DRV.UDPBuf+S.IP.TOTAL.LENGTH + + clc + + ldy #S.IP.V.IHL + + ldx #10 10 words for IP Header + +.1 lda DRV.UDPBuf,y + adc DRV.CheckSum + sta DRV.CheckSum + iny + lda DRV.UDPBuf,y + adc DRV.CheckSum+1 + sta DRV.CheckSum+1 + iny + dex + bne .1 + + lda DRV.CheckSum + adc #0 + eor #$FF + sta DRV.UDPBuf+S.IP.HDR.CHECKSUM + + lda DRV.CheckSum+1 + adc #0 + eor #$FF + sta DRV.UDPBuf+S.IP.HDR.CHECKSUM+1 +*-------------------------------------- + stz DRV.UDPBuf+S.UDP.CHECKSUM + stz DRV.UDPBuf+S.UDP.CHECKSUM+1 + + lda DRV.FrameSize + sec + sbc #S.IP + sta DRV.UDPBuf+S.UDP.LENGTH+1 + + pha + + eor #$ff + sta DRV.nCnt + + lda DRV.FrameSize+1 + sbc /S.IP + sta DRV.UDPBuf+S.UDP.LENGTH + + tax + + eor #$ff + sta DRV.nCnt+1 + + clc + + pla A,X = UDP Len + adc #S.IP.PROTOCOL.UDP + sta DRV.CheckSum+1 + + txa + adc /S.IP.PROTOCOL.UDP (all zero) + sta DRV.CheckSum + + ldy #S.IP.SRC + ldx #4 4 words for SRC & DST IP + +.2 lda DRV.UDPBuf,y + adc DRV.CheckSum + sta DRV.CheckSum + iny + lda DRV.UDPBuf,y + adc DRV.CheckSum+1 + sta DRV.CheckSum+1 + iny + dex + bne .2 + + >LDYAI DRV.UDPBuf + >STYA DRV.A1L + + ldy #S.IP + +.3 inc DRV.nCnt + bne .4 + + inc DRV.nCnt+1 + beq .8 + +.4 lda (DRV.A1L),y + adc DRV.CheckSum + sta DRV.CheckSum + + iny + bne .5 + + inc DRV.A1H + +.5 inc DRV.nCnt + bne .6 + + inc DRV.nCnt+1 + beq .7 + +.6 lda (DRV.A1L),y + adc DRV.CheckSum+1 + sta DRV.CheckSum+1 + iny + bne .3 + + inc DRV.A1H + bra .3 + +.7 lda #0 + adc DRV.CheckSum+1 + sta DRV.CheckSum+1 + +.8 lda DRV.CheckSum + adc #0 Don't forget to add last carry!!! + eor #$FF + sta DRV.UDPBuf+S.UDP.CHECKSUM + + lda DRV.CheckSum+1 + adc #0 Don't forget to add last carry!!! + eor #$FF + sta DRV.UDPBuf+S.UDP.CHECKSUM+1 + rts +*-------------------------------------- +DRV.R200 lda DRV.InBuf+S.UDP+10+256,y +DRV.R200.DEC .EQ *-DRV.R200+$1ff + bit RRAMWRAMBNK1 + sta (DRV.BUFF),y + bit RRAMWRAMBNK2 + iny + bne DRV.R200 + + rts + +DRV.R200.L .EQ *-DRV.R200 +*-------------------------------------- +DRV.W200 bit RRAMWRAMBNK1 + lda (DRV.BUFF),y + bit RRAMWRAMBNK2 + sta DRV.UDPBuf.Data+256,y +DRV.W200.DEC .EQ *-DRV.W200+$1ff + eor DRV.UDPBuf.Data+512 + sta DRV.UDPBuf.Data+512 + iny + bne DRV.W200 + + rts + +DRV.W200.L .EQ *-DRV.W200 +*-------------------------------------- +DRV.D1TotalBlks .BS 2 +DRV.D2TotalBlks .BS 2 +DRV.BLK.Slotn0 .BS 1 SELF MODIFIED slot 0n +DRV.TimeOut .BS 1 +DRV.FrameSize .BS 2 +DRV.nCnt .BS 2 +DRV.CheckSum .BS 2 +*-------------------------------------- + .EP +*-------------------------------------- + .LIST ON +DRV.BLK.SIZE .EQ *-DRV.BLK + .LIST OFF +*-------------------------------------- +MAN +SAVE usr/src/sys/pm.vedrive.s.bk +LOAD usr/src/sys/pm.vedrive.s +ASM diff --git a/SYS/PM.VEDRIVE.S.GS.txt b/SYS/PM.VEDRIVE.S.GS.txt index 61a724a2..c59feec4 100644 --- a/SYS/PM.VEDRIVE.S.GS.txt +++ b/SYS/PM.VEDRIVE.S.GS.txt @@ -4,12 +4,54 @@ NEW GS.Init sec rts *-------------------------------------- -DRV.GS .EQ * - .PH $D400 +GS.Read php + sei + ldx Slotn0 +*-------------------------------------- +GS.READWRITE.9 plp + sec + rts +*-------------------------------------- +GS.Write php + sei + + ldx Slotn0 + + plp + sec + rts +*-------------------------------------- +GS.Name >PSTR "LanCEgs" +*-------------------------------------- +DRV.GS .PH DRV.NIC.START + + jmp DRV.GS.Write + +DRV.GS.Read php + sei + + + +*-------------------------------------- +DRV.GS.9 plp + sec + rts +*-------------------------------------- +DRV.GS.Write php + sei + + + plp + sec + rts *-------------------------------------- .EP + + .LIST ON +DRV.GS.SIZE .EQ *-DRV.GS + .LIST OFF *-------------------------------------- MAN SAVE usr/src/sys/pm.vedrive.s.gs diff --git a/SYS/PM.VEDRIVE.S.IP.txt b/SYS/PM.VEDRIVE.S.IP.txt index 980e5361..971e00dd 100644 --- a/SYS/PM.VEDRIVE.S.IP.txt +++ b/SYS/PM.VEDRIVE.S.IP.txt @@ -4,15 +4,21 @@ NEW VEDRIVE.MACInit ldx #5 .1 lda CONF.SRCMAC,x + sta DHCP.DISC.SRCMAC,x sta DHCP.REQ.SRCMAC,x + sta DHCP.DISC.CHADDR,x sta DHCP.REQ.CHADDR,x + sta ARP.REQ.SRCMAC,x sta ARP.REQ.SHA,x + sta ARP.REP.SRCMAC,x sta ARP.REP.SHA,x + sta ADT.REQ.SRCMAC,x + dex bpl .1 @@ -21,13 +27,17 @@ VEDRIVE.MACInit ldx #5 VEDRIVE.IPInit ldx #3 .1 lda CONF.ADDRESS,x + sta ARP.REQ.SPA,x - sta ARP.REP.TPA,x + sta ARP.REP.SPA,x sta ADT.REQ.IP.SRC,x lda CONF.SERVER,x sta ARP.REQ.TPA,x sta ADT.REQ.IP.DST,x + + sta ARP.REP.TPA,x + dex bpl .1 @@ -143,9 +153,22 @@ VEDRIVE.UDPChecksum dey lda (ZPBufPtr),y - adc /S.IP.PROTOCOL.UDP (all zero) + adc /S.IP.PROTOCOL.UDP (all zero) sta ZPCheckSum - jsr VEDRIVE.AddSrcDstIPToChecksum + + ldy #S.IP.SRC + ldx #4 4 words for SRC & DST IP + +.1 lda (ZPBufPtr),y + adc ZPCheckSum + sta ZPCheckSum + iny + lda (ZPBufPtr),y + adc ZPCheckSum+1 + sta ZPCheckSum+1 + iny + dex + bne .1 ldy #S.UDP.LENGTH+1 lda (ZPBufPtr),y @@ -223,23 +246,6 @@ VEDRIVE.ComputeChecksum sta (ZPBufPtr),y rts *-------------------------------------- -VEDRIVE.AddSrcDstIPToChecksum - ldy #S.IP.SRC - ldx #4 4 words for SRC & DST IP - -.1 lda (ZPBufPtr),y - adc ZPCheckSum - sta ZPCheckSum - iny - lda (ZPBufPtr),y - adc ZPCheckSum+1 - sta ZPCheckSum+1 - iny - dex - bne .1 - - rts -*-------------------------------------- VEDRIVE.CheckDHCPOffer >LDYAI FRAMEBUF >STYA ZPBufPtr @@ -459,7 +465,6 @@ VEDRIVE.CheckARPFrame ldy #S.ARP.OPERATION+1 lda (ZPBufPtr),y - cmp #S.ARP.OPERATION.REP bne .5 *-------------------------------------- @@ -479,6 +484,8 @@ VEDRIVE.CheckARPFrame .2 lda (ZPBufPtr),y sta ADT.REQ.DSTMAC,x + sta ARP.REP.DSTMAC,x + sta ARP.REP.THA,x dey dex bpl .2 diff --git a/SYS/PM.VEDRIVE.S.U1.txt b/SYS/PM.VEDRIVE.S.U1.txt index d3400516..a472f7d6 100644 --- a/SYS/PM.VEDRIVE.S.U1.txt +++ b/SYS/PM.VEDRIVE.S.U1.txt @@ -234,10 +234,154 @@ U1.WRITE php *-------------------------------------- U1.Name >PSTR "Uthernet V1" *-------------------------------------- -DRV.U1 .EQ * - .PH $D400 +DRV.U1 .PH DRV.NIC.START + jmp DRV.U1.SendARP + jmp DRV.U1.SendUDP + +DRV.U1.Rcvd php + sei + + ldx DRV.BLK.Slotn0 + + lda /PP.RxEvent + sta PacketPagePTR+1,x + lda #PP.RxEvent + sta PacketPagePTR,x + + lda PacketPageDATA+1,x + ldy PacketPageDATA,x + and /PP.RxEvent.RxOK+PP.RxEvent.IA+PP.RxEvent.Brdcast+PP.RxEvent.Runt + beq DRV.U1.9 + + lda RTDATA+1,x discard RxStatus + lda RTDATA,x + + lda RTDATA+1,x get RxLength + sta DRV.FrameSize+1 + eor #$ff + sta DRV.nCnt+1 + + lda RTDATA,x + sta DRV.FrameSize + eor #$ff + sta DRV.nCnt + + >LDYAI DRV.InBuf + >STYA DRV.A1L + + ldy #0 + +.2 inc DRV.nCnt + bne .3 + + inc DRV.nCnt+1 + beq .8 + +.3 lda RTDATA,x + sta (DRV.A1L),y + iny + + inc DRV.nCnt + bne .4 + + inc DRV.nCnt+1 + beq .8 + +.4 lda RTDATA+1,x + sta (DRV.A1L),y + iny + bne .2 + + inc DRV.A1L+1 + bra .2 + +.8 plp + clc + rts +*-------------------------------------- +DRV.U1.9 plp + sec + rts +*-------------------------------------- +DRV.U1.SendARP >LDYAI S.ARP + >STYA DRV.FrameSize + >LDYAI DRV.ARPBuf + bra DRV.U1.Send +*-------------------------------------- +DRV.U1.SendUDP >STYA DRV.FrameSize + + jsr DRV.BLK.IPUDPCheksum + + >LDYAI DRV.UDPBuf + +DRV.U1.Send >STYA DRV.A1L + + php + sei + + ldx DRV.BLK.Slotn0 + + lda /PP.TxCMD.LID+PP.TxCMD.TxStartFULL + sta TxCMD+1,x + lda #PP.TxCMD.LID+PP.TxCMD.TxStartFULL + sta TxCMD,x + + lda DRV.FrameSize+1 + sta TxLength+1,x + eor #$ff + sta DRV.nCnt+1 + + lda DRV.FrameSize + sta TxLength,x + eor #$ff + sta DRV.nCnt + + lda /PP.BusST + sta PacketPagePTR+1,x + lda #PP.BusST + sta PacketPagePTR,x + + lda PacketPageDATA+1,x + ldy PacketPageDATA,x + bit /PP.BusST.Rdy4TxNOW + beq DRV.U1.9 + + ldy #0 + +.1 inc DRV.nCnt + bne .2 + + inc DRV.nCnt+1 + beq .8 + +.2 lda (DRV.A1L),y + sta RTDATA,x + iny + + inc DRV.nCnt + bne .3 + + inc DRV.nCnt+1 + beq .8 + +.3 lda (DRV.A1L),y + sta RTDATA+1,x + iny + bne .1 + + inc DRV.A1H + bra .1 + +.8 plp + clc + rts +*-------------------------------------- .EP + + .LIST ON +DRV.U1.SIZE .EQ *-DRV.U1 + .LIST OFF *-------------------------------------- MAN SAVE usr/src/sys/pm.vedrive.s.u1 diff --git a/SYS/PM.VEDRIVE.S.U2.txt b/SYS/PM.VEDRIVE.S.U2.txt index 9832ccc9..c3580c8b 100644 --- a/SYS/PM.VEDRIVE.S.U2.txt +++ b/SYS/PM.VEDRIVE.S.U2.txt @@ -250,15 +250,15 @@ U2.Name >PSTR "Uthernet II" Offset .BS 2 TotalSize .BS 2 *-------------------------------------- -DRV.U2 .EQ * - .PH DRV.NIC.START +DRV.U2 .PH DRV.NIC.START -DRV.U2.START jmp DRV.U2.Write + jmp DRV.U2.SendARP + jmp DRV.U2.SendUDP -DRV.U2.Read php +DRV.U2.Rcvd php sei - ldx DRV.START + ldx DRV.BLK.Slotn0 >AR.SELECT S0.RX.RSR lda W5100.DR,x get the received size HI @@ -289,18 +289,18 @@ DRV.U2.Read php * lda DRV.TotalSize sec sbc #2 MACRAW:strip 2 bytes Header from Size - sta DRV.BufSize + sta DRV.FrameSize eor #$ff sta DRV.nCnt lda DRV.TotalSize+1 sbc #0 - sta DRV.BufSize+1 + sta DRV.FrameSize+1 eor #$ff sta DRV.nCnt+1 - >LDYA DRV.InBuf - >STYA .4+1 + >LDYAI DRV.InBuf + >STYA DRV.A1L ldy #0 @@ -311,11 +311,12 @@ DRV.U2.Read php beq .8 .3 lda W5100.DR,x -.4 sta $FFFF,y SELF MODIFIED + + sta (DRV.A1L),y iny bne .2 - inc .4+2 + inc DRV.A1H bra .2 .8 >AR.SELECT S0.RX.RD @@ -343,30 +344,39 @@ DRV.U2.9 plp sec rts *-------------------------------------- -DRV.U2.Write php - sei +DRV.U2.SendARP >LDYAI S.ARP + >STYA DRV.FrameSize + >LDYAI DRV.ARPBuf + bra DRV.U2.Send +*-------------------------------------- +DRV.U2.SendUDP >STYA DRV.FrameSize - >STYA DRV.BufSize + jsr DRV.BLK.IPUDPCheksum + >LDYAI DRV.UDPBuf + +DRV.U2.Send >STYA DRV.A1L + + lda DRV.FrameSize+1 eor #$ff sta DRV.nCnt+1 - tya + lda DRV.FrameSize eor #$ff sta DRV.nCnt - >LDYA DRV.OutBuf - >STYA .3+1 + php + sei - ldx DRV.START + ldx DRV.BLK.Slotn0 >AR.SELECT S0.TX.FSR lda W5100.DR,x get send size HI nop nop ldy W5100.DR,x LO - cpy DRV.BufSize - sbc DRV.BufSize+1 + cpy DRV.FrameSize + sbc DRV.FrameSize+1 bcc DRV.U2.9 >AR.SELECT S0.TX.WR @@ -390,21 +400,21 @@ DRV.U2.Write php inc DRV.nCnt+1 beq .8 -.3 lda $FFFF,y SELF MODIFIED +.3 lda (DRV.A1L),y sta W5100.DR,x iny bne .2 - inc .3+2 + inc DRV.A1H bra .2 .8 >AR.SELECT S0.TX.WR lda DRV.Offset clc - adc DRV.BufSize + adc DRV.FrameSize pha save LO lda DRV.Offset+1 - adc DRV.BufSize+1 + adc DRV.FrameSize+1 sta W5100.DR,x write HI pla sta W5100.DR,x write LO @@ -418,9 +428,7 @@ DRV.U2.Write php rts *-------------------------------------- DRV.Offset .BS 2 -DRV.BufSize .BS 2 DRV.TotalSize .BS 2 -DRV.nCnt .BS 2 *-------------------------------------- .EP diff --git a/SYS/PM.VEDRIVE.S.txt b/SYS/PM.VEDRIVE.S.txt index b76b8794..dffbf6a3 100644 --- a/SYS/PM.VEDRIVE.S.txt +++ b/SYS/PM.VEDRIVE.S.txt @@ -12,9 +12,9 @@ NEW .INB inc/mli.i .INB inc/mli.e.i .INB inc/nic.i + .INB inc/nic.91c96.i .INB inc/nic.8900a.i .INB inc/nic.w5100.i - .INB inc/nic.91c96.i .INB inc/eth.i .INB inc/net.tcpip.i .INB inc/net.dhcp.i @@ -33,16 +33,33 @@ timerC .EQ 17 bRemoteMac .EQ 18 Slotn0 .EQ 19 *-------------------------------------- -ADT.CMD.VSD .EQ $C5 "E": Virtual Drive Command Envelope -ADT.CMD.PING .EQ $D9 "Y": PING -DRV.EntryPoint .EQ $BF41 -DRV.NIC.START .EQ $D500 -*-------------------------------------- CONF.FBUF .EQ $4000 CONF.LBUF .EQ $4400 CONF.FILEPATH .EQ $4500 FRAMEBUF .EQ $4600 *-------------------------------------- +ADT.CMD.VSD .EQ $C5 "E": Virtual Drive Command Envelope +ADT.CMD.PING .EQ $D9 "Y": PING +DRV.EntryPoint .EQ $BF41 +*-------------------------------------- +DRV.BLK.START .EQ $D400 +DRV.NIC.START .EQ $D800 +*-------------------------------------- +DRV.NIC.SendARP .EQ DRV.NIC.START +DRV.NIC.SendUDP .EQ DRV.NIC.START+3 +DRV.NIC.Rcvd .EQ DRV.NIC.START+6 +*-------------------------------------- +DRV.ARPBuf .EQ $DA00-S.UDP-5-S.ARP +DRV.UDPBuf .EQ $DA00-S.UDP-5 Frame Buffer = S.UDP+5+512+1 bytes +DRV.UDPBuf.Env .EQ DRV.UDPBuf+S.UDP +DRV.UDPBuf.Cmd .EQ DRV.UDPBuf+S.UDP+1 +DRV.UDPBuf.BlkL .EQ DRV.UDPBuf+S.UDP+2 +DRV.UDPBuf.BlkH .EQ DRV.UDPBuf+S.UDP+3 +DRV.UDPBuf.Sum .EQ DRV.UDPBuf+S.UDP+4 +DRV.UDPBuf.Data .EQ DRV.UDPBuf+S.UDP+5 +*-------------------------------------- +DRV.InBuf .EQ $DA00 Frame Buffer = 1536 bytes +*-------------------------------------- VEDRIVE.Init >LDYAI VEDRIVE.MSG0 jsr PrintFYA @@ -111,8 +128,7 @@ VEDRIVE.Init >LDYAI VEDRIVE.MSG0 .7 >LDYAI VEDRIVE.SRVOK jsr PrintFYA -* jsr VEDRIVE.SetSlot - sec + jsr VEDRIVE.SetSlot bcc .8 >LDYAI VEDRIVE.NOSLOT @@ -124,7 +140,7 @@ VEDRIVE.Init >LDYAI VEDRIVE.MSG0 >LDYAI VEDRIVE.DEVOK jsr PrintFYA -* jsr VEDRIVE.Install + jsr VEDRIVE.Install bcc .9 >LDYAI VEDRIVE.DRVIKO @@ -133,6 +149,7 @@ VEDRIVE.Init >LDYAI VEDRIVE.MSG0 .9 >LDYAI VEDRIVE.DRVIOK jsr PrintFYA + rts *-------------------------------------- VEDRIVE.CheckDRV @@ -177,11 +194,17 @@ VEDRIVE.Ping lda CONF.PORT .4 jsr VEDRIVE.CheckADTRep bcc .8 - + jsr VEDRIVE.CheckARPFrame bra .3 -.8 +.8 ldy #S.UDP+$29 + lda (ZPBufPtr),y + sta CONF.D1TOTALBLK + iny + lda (ZPBufPtr),y + sta CONF.D1TOTALBLK+1 + * clc .9 rts *-------------------------------------- @@ -198,7 +221,7 @@ VEDRIVE.SendUDP jsr VEDRIVE.IPChecksum VEDRIVE.SendARP ldx CONF.NIC jmp (.1,x) -.1 .DA U1.WRITE +.1 .DA GS.WRITE .DA U1.WRITE .DA U2.WRITE *-------------------------------------- @@ -208,7 +231,7 @@ VEDRIVE.READ >LDYAI FRAMEBUF ldx CONF.NIC jmp (.1,x) -.1 .DA U1.READ +.1 .DA GS.READ .DA U1.READ .DA U2.READ *-------------------------------------- @@ -294,22 +317,26 @@ VEDRIVE.Install ldx #PATCH.SIZE bit RRAMWRAMBNK2 bit RRAMWRAMBNK2 - ldy #DRV.SIZE-1 + >LDYAI DRV.BLK + >STYA ZPPtr1 -.2 lda DRV,y - sta DRV.START,y - dey - bne .2 + lda #DRV.BLK.START + sta ZPPtr2 + lda /DRV.BLK.START + sta ZPPtr2+1 + + lda #DRV.BLK.SIZE + eor #$ff + sta ZPnCnt + + lda /DRV.BLK.SIZE + eor #$ff + sta ZPnCnt+1 + + jsr VEDRIVE.Move lda Slotn0 - sta DRV.START - - ldy #DRV.IP.SIZE-1 - -.3 lda DRV.IP,y - sta DRV.IP.START,y - dey - bne .3 + sta DRV.BLK.Slotn0 ldx CONF.NIC lda .10,x @@ -317,7 +344,7 @@ VEDRIVE.Install ldx #PATCH.SIZE lda .10+1,x sta ZPPtr1+1 - + lda .20,x eor #$ff sta ZPnCnt @@ -325,49 +352,68 @@ VEDRIVE.Install ldx #PATCH.SIZE lda .20+1,x eor #$ff sta ZPnCnt+1 - + lda #DRV.NIC.START sta ZPPtr2 lda /DRV.NIC.START sta ZPPtr2+1 - - ldy #0 - -.4 inc ZPnCnt - bne .5 - - inc ZPnCnt+1 - beq .6 - -.5 lda (ZPPtr1),y - sta (ZPPtr2),y - iny - bne .4 - - inc ZPPtr1+1 - inc ZPPtr2+1 - bra .4 -.6 ldy #S.UDP + jsr VEDRIVE.Move -.7 lda ADT.REQ-1,y - sta DRV.OutBuf-1,y - dey + ldx #S.ARP + +.7 lda ARP.REP-1,x + sta DRV.ARPBuf-1,x + dex bne .7 + + ldx #S.UDP + +.8 lda ADT.REQ-1,x + sta DRV.UDPBuf-1,x + dex + bne .8 + + lda #ADT.CMD.VSD + sta DRV.UDPBuf.Env + + ldx #3 +.80 lda CONF.D1TOTALBLK,x + sta DRV.D1TotalBlks,x + dex + bpl .80 + bit RROMBNK1 clc rts *-------------------------------------- -.10 .DA DRV.U2 - .DA DRV.U2 +.10 .DA DRV.GS + .DA DRV.U1 .DA DRV.U2 *-------------------------------------- -.20 .DA DRV.U2.SIZE - .DA DRV.U2.SIZE +.20 .DA DRV.GS.SIZE + .DA DRV.U1.SIZE .DA DRV.U2.SIZE *-------------------------------------- - .INB usr/src/shared/x.printf.s +VEDRIVE.Move ldy #0 + +.1 inc ZPnCnt + bne .2 + + inc ZPnCnt+1 + beq .8 + +.2 lda (ZPPtr1),y + sta (ZPPtr2),y + iny + bne .1 + + inc ZPPtr1+1 + inc ZPPtr2+1 + bra .1 + +.8 rts *-------------------------------------- * ProDOS $BE41->$BE4B Patch for switching to BANK2 (10 bytes) *-------------------------------------- @@ -375,287 +421,20 @@ COPYRIGHT .AS "(C)APPLE " COPYRIGHT.LEN .EQ *-COPYRIGHT PATCH .PH DRV.EntryPoint bit RRAMWRAMBNK2 - jsr $D002 + jsr DRV.BLK.START bit RRAMWRAMBNK1 rts .EP PATCH.SIZE .EQ *-PATCH *-------------------------------------- -* Drivers -*-------------------------------------- -* OP = 2 : Write drv1 -* OP = 3 : Read drv1 -* OP = 4 : Write drv2 -* OP = 5 : Read drv2 -* CMD = $C5+OP+BLKLO+BLKHI+CHKSUM -* DO NOT trash DRV.COMMAND...DRV.BLKNUM as ProDOS -* reuses them after Block operation -* A1,A2 are used by Disk II Driver, -* so we use it safely as Tmp Ptr -*-------------------------------------- -DRV.A1L .EQ $3C -DRV.A1H .EQ $3D -DRV.A2L .EQ $3E -DRV.A2H .EQ $3F -DRV.COMMAND .EQ $42 -DRV.UNITNUM .EQ $43 -DRV.BUFF .EQ $44 -DRV.BLKNUM .EQ $46 -*-------------------------------------- -DRV.Write .EQ DRV.NIC.START -DRV.Read .EQ DRV.NIC.START+3 -*-------------------------------------- -DRV.OutBuf .EQ $D800-S.UDP-6 Frame Buffer = S.UDP+5+512+1 bytes -DRV.OutBuf.Env .EQ DRV.OutBuf+S.UDP -DRV.OutBuf.Cmd .EQ DRV.OutBuf+S.UDP+1 -DRV.OutBuf.BlkL .EQ DRV.OutBuf+S.UDP+2 -DRV.OutBuf.BlkH .EQ DRV.OutBuf+S.UDP+3 -DRV.OutBuf.Sum .EQ DRV.OutBuf+S.UDP+4 -DRV.OutBuf.Data .EQ DRV.OutBuf+S.UDP+5 -*-------------------------------------- -DRV.InBuf .EQ $DA00 Frame Buffer = 1536 bytes -*-------------------------------------- -DRV .PH $D001 Main LC Bnk 2 $D001->$DFFF - -DRV.START .BS 1 SELF MODIFIED slot 0n - >DEBUG - lda DRV.COMMAND S=0,R=1,W=2,F=3 - bne .1 - - ldx #$ff return Status - ldy #$ff - -.8 lda #0 - clc - rts - -.1 cmp #3 - beq .8 Format .... - - bcs DRV.DO.CMD.ERR more....IO error - - ora #2 W=2,R=3 - ldy DRV.UNITNUM - bpl .2 - - adc #2 CC from bcs - -.2 sta DRV.OutBuf.Cmd store cmd - eor #ADT.CMD.VSD - eor DRV.BLKNUM - eor DRV.BLKNUM+1 - sta DRV.OutBuf.Sum Compute & store CheckSum - - lda DRV.BLKNUM - sta DRV.OutBuf.BlkL - lda DRV.BLKNUM+1 - sta DRV.OutBuf.BlkH -*-------------------------------------- - lda DRV.COMMAND - dec 1-1=0 if read - bne DRV.DO.CMD.W go write -*-------------------------------------- -* Read block -*-------------------------------------- -DRV.DO.CMD.R ldy #S.UDP+5 - lda /S.UDP+5 - - jsr DRV.Write - - - -DRV.DO.CMD.ERR - lda #MLI.E.IO - sec - rts -*-------------------------------------- -* Write Block -*-------------------------------------- -DRV.DO.CMD.W lda #$B1 lda (),y - - lda #MLI.E.IO - sec - rts -*-------------------------------------- -DRV.RWBYTE bit RRAMWRAMBNK1 - sta (DRV.BUFF),y - bit RRAMWRAMBNK2 - rts -*-------------------------------------- - .EP -*-------------------------------------- - .LIST ON -DRV.SIZE .EQ *-DRV - .LIST OFF -*-------------------------------------- -DRV.IP .PH $D400 - -DRV.IP.START ldy #S.IP.TOTAL.LENGTH+1 - lda ZPBufCnt - sec - sbc #S.ETH.EII - sta (ZPBufPtr),y - dey - lda ZPBufCnt+1 - sbc /S.ETH.EII - sta (ZPBufPtr),y - lda #0 - ldy #S.IP.HDR.CHECKSUM - sta (ZPBufPtr),y - iny - sta (ZPBufPtr),y - - stz ZPCheckSum RESET IP CHECKSUM - stz ZPCheckSum+1 - - clc - - ldy #S.IP.V.IHL - - ldx #10 10 words for IP Header - -.1 lda (ZPBufPtr),y - adc ZPCheckSum - sta ZPCheckSum - iny - lda (ZPBufPtr),y - adc ZPCheckSum+1 - sta ZPCheckSum+1 - iny - dex - bne .1 - - ldy #S.IP.HDR.CHECKSUM - lda ZPCheckSum - adc #0 - eor #$FF - sta (ZPBufPtr),y - iny - lda ZPCheckSum+1 - adc #0 - eor #$FF - sta (ZPBufPtr),y - rts -*-------------------------------------- - clc - - ldy #S.UDP.LENGTH+1 - lda (ZPBufPtr),y - adc #S.IP.PROTOCOL.UDP - sta ZPCheckSum+1 - - dey - lda (ZPBufPtr),y - adc /S.IP.PROTOCOL.UDP (all zero) - sta ZPCheckSum - - ldy #S.IP.SRC - ldx #4 4 words for SRC & DST IP - -.2 lda (ZPBufPtr),y - adc ZPCheckSum - sta ZPCheckSum - iny - lda (ZPBufPtr),y - adc ZPCheckSum+1 - sta ZPCheckSum+1 - iny - dex - bne .2 - - ldy #S.UDP.LENGTH+1 - lda (ZPBufPtr),y - eor #$ff - tax - - dey - lda (ZPBufPtr),y - eor #$ff - ldy #S.UDP.CHECKSUM - - phy Save Offset - pha Save !ByteCount.HI - - lda #0 Reset Checksum - sta (ZPBufPtr),y - iny - sta (ZPBufPtr),y - - >LDYA ZPBufPtr - >STYA ZPPtr1 - - ldy #S.IP - -.3 inx - bne .4 - - pla - inc - beq .8 - - pha -.4 lda (ZPPtr1),y - adc ZPCheckSum - sta ZPCheckSum - - iny - bne .5 - - inc ZPPtr1+1 -.5 inx - bne .6 - - pla - inc - beq .7 - - pha - -.6 lda (ZPPtr1),y - - adc ZPCheckSum+1 - sta ZPCheckSum+1 - iny - bne .3 - - inc ZPPtr1+1 - bra .3 - -.7 adc ZPCheckSum+1 A=0 from beq .7 - sta ZPCheckSum+1 - -.8 ply - lda ZPCheckSum - adc #0 Don't forget to add last carry!!! - eor #$FF - sta (ZPBufPtr),y - iny - lda ZPCheckSum+1 - adc #0 Don't forget to add last carry!!! - eor #$FF - sta (ZPBufPtr),y - rts -*-------------------------------------- - .EP -*-------------------------------------- - .LIST ON -DRV.IP.SIZE .EQ *-DRV.IP - .LIST OFF -*-------------------------------------- -* CONTROL SECTION : -*-------------------------------------- - .DO DRV.SIZE>255 - ERROR:DRV.SIZE too big - .FIN -*-------------------------------------- - - + .INB usr/src/shared/x.printf.s *-------------------------------------- .INB usr/src/sys/pm.vedrive.s.cf + .INB usr/src/sys/pm.vedrive.s.bk .INB usr/src/sys/pm.vedrive.s.ip + .INB usr/src/sys/pm.vedrive.s.gs .INB usr/src/sys/pm.vedrive.s.u1 .INB usr/src/sys/pm.vedrive.s.u2 - .INB usr/src/sys/pm.vedrive.s.gs *-------------------------------------- VEDRIVE.MSG0 .AZ "VEDRIVE (ADTPro Virtual Ethernet HD) Driver\n" VEDRIVE.DRVKO .AZ "VEDRIVE (Or other custom Driver) Already Installed.\n" @@ -703,6 +482,8 @@ CONF.MASK .HS 00000000 CONF.GATEWAY .HS 00000000 CONF.SERVER .HS 00000000 CONF.PORT .DA /1977,#1977 +CONF.D1TOTALBLK .DA $FFFF +CONF.D2TOTALBLK .DA $FFFF *-------------------------------------- MLIGETPREFIX.P .DA #1 .DA CONF.FILEPATH @@ -829,7 +610,7 @@ DHCP.REQ.OPT.SVRIP .BS 4 DHCP.REQ.END .EQ * DHCP.REQ.LEN .EQ *-DHCP.REQ *-------------------------------------- -ADT.REQ +ADT.REQ ADT.REQ.DSTMAC .BS 6 DST MAC ADT.REQ.SRCMAC .BS 6 .DA /S.ETH.EII.TYPE.IP diff --git a/SYS/PM.VSDRIVE.S.txt b/SYS/PM.VSDRIVE.S.txt index 80133c3e..6acf635c 100644 --- a/SYS/PM.VSDRIVE.S.txt +++ b/SYS/PM.VSDRIVE.S.txt @@ -370,8 +370,8 @@ PATCH.LEN .EQ *-PATCH *-------------------------------------- *DRV.PCL .EQ $3A *DRV.PCH .EQ $3B -*DRV.A1L .EQ $3C -*DRV.A1H .EQ $3D +DRV.A1L .EQ $3C +DRV.A1H .EQ $3D *DRV.A2L .EQ $3E *DRV.A2H .EQ $3F *--------------------------------------