diff --git a/A2OSX.BOOT.po b/A2OSX.BOOT.po index 1af43bff..2a0bb660 100644 Binary files a/A2OSX.BOOT.po and b/A2OSX.BOOT.po differ diff --git a/A2OSX.DEV.po b/A2OSX.DEV.po new file mode 100644 index 00000000..f7c90bab Binary files /dev/null and b/A2OSX.DEV.po differ diff --git a/A2OSX.SRC.po b/A2OSX.SRC.po index 6ffee0e0..15a7cbfc 100644 Binary files a/A2OSX.SRC.po and b/A2OSX.SRC.po differ diff --git a/A2osX.S.QC.txt b/A2osX.S.QC.txt index 545a470f..e6fb4b37 100644 --- a/A2osX.S.QC.txt +++ b/A2osX.S.QC.txt @@ -4,26 +4,25 @@ DELETE A2OSX.SYSTEM PREFIX /A2OSX.SRC NEW INC 1 -AUTO 6 +AUTO 8 .LIST OFF *-------------------------------------- * ****** START OF MLI QUIT CODE ****** -* Load Address :$1000-$11FF -* setup $BE00 Global page : -* Copy from $1200 to $BE00 +* Load Address :$1000-$12FF *-------------------------------------- MLIOPEN00.PATH .EQ $200 MLIOPEN00.BUFF .EQ $0C00 1k Buffer for MLI open -MLIREAD00.ADDR .EQ $2000 for loading kernel.bin before moving to LC1 +MLIREAD00.ADDR .EQ $2000 for loading KERNEL *-------------------------------------- -A2osX.QC.B.Start .PH $1000 *-------------------------------------- +* Kernel Stage 1 +*-------------------------------------- A2osX.QC.Start .EQ * A2osX.QC cld jmp A2osX.QC.Start1 -A2osX.QC.Prefix .BS 32 +A2osX.QC.Prefix .BS 64 A2osX.QC.Start1 sei ldx #$FF @@ -47,7 +46,7 @@ A2osX.QC.Start1 sei lda #$8C Reset 80 col screen ($0C=FF=HOME) jsr $C300 - >LDAXI MSG.STAGE1 + >LDAXI MSG.INIT1 jsr A2osX.QC.PrintAX ldx #0 @@ -79,17 +78,16 @@ A2osX.QC.Start1 sei jsr A2osX.QC.KLoad bcs .9 - >LDYAI GO.Reset - >STYA POWERUP - bit RROMBNK1 - jsr SETPWRC +* >LDYAI GO.Reset +* >STYA POWERUP +* bit RROMBNK1 +* jsr SETPWRC - >LDAXI MSG.STAGE1OK + >LDAXI MSG.INIT1OK jsr A2osX.QC.PrintAX >DEBUGOA - - jmp (POWERUP) + jmp $2000 .9 >LDAXI MSG.KLOADING.KO jsr A2osX.QC.PrintAX @@ -130,36 +128,7 @@ A2osX.QC.KLoad ldx A2osX.QC.Prefix jsr MLI .DA #MLICLOSE .DA MLICLOSE00 - bcs .9 - - php - sei - sta SETALTZP - lda RRAMWRAMBNK1 - lda RRAMWRAMBNK1 - >LDYAI MLIREAD00.ADDR+$2F00 - >STYA TmpPtr1 - >LDYAI $D000+$2F00 - >STYA TmpPtr2 - ldx #$30 - ldy #$F9 do not trash NMI,BRK,IRQ Vectors - -.3 lda (TmpPtr1),y - sta (TmpPtr2),y - dey - cpy #$FF - bne .3 - - dec TmpPtr1+1 - dec TmpPtr2+1 - dex - bne .3 - - lda RROMBNK1 - sta CLRALTZP - plp - clc .9 rts *-------------------------------------- A2osX.QC.PrintAX @@ -195,14 +164,14 @@ MLICLOSE00 .DA #1 *-------------------------------------- SYSKERNEL >PSTRING "SYS/KERNEL" *-------------------------------------- -MSG.STAGE1 >PSTRING "A2osX[Stage1]:Init" +MSG.INIT1 >PSTRING "A2osX[Stage1]:Init" MSG.SETPREFIXOK >PSTRING "Set Prefix OK" MSG.SETPREFIXKO >PSTRING "Insert Vol:" MSG.KLOADING >PSTRING "Loading Kernel..." MSG.KLOADING.KO >PSTRING "Error While Loading Kernel." -MSG.STAGE1OK >PSTRING "A2osX[Stage1]:Complete." +MSG.INIT1OK >PSTRING "A2osX[Stage1]:Complete." *-------------------------------------- - .BS $1200-* + .BS $1300-* .EP *-------------------------------------- MAN diff --git a/A2osX.S.txt b/A2osX.S.txt index 6f814e48..33650cec 100644 --- a/A2osX.S.txt +++ b/A2osX.S.txt @@ -4,7 +4,7 @@ DELETE A2OSX.SYSTEM PREFIX /A2OSX.SRC NEW INC 1 -AUTO 6 +AUTO 8 .LIST OFF .OP 65C02 .OR $2000 @@ -19,7 +19,6 @@ AUTO 6 TmpPtr1 .EQ $0 main & aux ZP TmpPtr2 .EQ $2 main & aux ZP *-------------------------------------- -A2osX.RelocAddr .EQ $1000 A2osX.KMLOAD .EQ $2000 A2osX.KMMAXLEN .EQ $4000 A2osX.OpenBuff1 .EQ $6000 1024 Buffer for MLIOPEN01 @@ -28,16 +27,13 @@ A2osX.ReadBuff .EQ $6800 512 Buffer for MLIREAD01 Boot.Prefix .EQ $6A00 MLI.MAXPATH KM.Filename .EQ $6A80 MLI.MAXPATH *-------------------------------------- -A2osX.Start .EQ * - .PH A2osX.RelocAddr -A2osX.Init0 - - ldx #$FF init 6502 stack to highest - txs +* Kernel Stage 0 +*-------------------------------------- + .PH $1000 - >LDYAI A2osX.Start +A2osX.Init0 >LDYAI $2000 >STYA TmpPtr1 - >LDYAI A2osX.RelocAddr + >LDYAI $1000 >STYA TmpPtr2 ldx #$10 reloc $2000-$2FFF to $1000-$1FFF @@ -55,9 +51,12 @@ A2osX.Init0 jmp A2osX.Init1 *-------------------------------------- -A2osX.Init1 bit RROMBNK1 +A2osX.Init1 ldx #$FF init 6502 stack to highest + txs + + bit RROMBNK1 jsr HOME - >LDAXI MSG.STAGE0 + >LDAXI MSG.INIT0 jsr PrintCStrAX >LDAXI MSG.SYSMEM @@ -72,10 +71,10 @@ A2osX.Init1 bit RROMBNK1 jsr PrintCStrAX bra * -.1 lda #$8C Reset 80 col screen ($0C=FF=HOME) +.1 lda #$8C Reset 80 col screen ($0C:HOME) jsr $C300 - >LDAXI MSG.STAGE0 + >LDAXI MSG.INIT0 jsr PrintCStrAX >LDAXI MSG.SYSMEM @@ -83,97 +82,22 @@ A2osX.Init1 bit RROMBNK1 >LDAXI MSG.SYSMEM.OK jsr PrintCStrAX -*-------------------------------------- -A2osX.SetHZ lda #6 - sta A2osX.HZ - pha push HZ - >LDAXI MSG.HZ - jsr PrintCStrAX -*-------------------------------------- + >LDAXI MSG.CPU jsr PrintCStrAX - jsr Init6502 Y = CPU type - tya - ora #$60 - sta A2osX.CPUTYPE + + sed Test 6502 BCD bug + lda #$99 + clc + adc #$01 + cld + bpl .2 if minus, BUG!, we have 6502 - lda MSG.CPUTYPEH,y - tax - lda MSG.CPUTYPEL,y - jsr PrintCStrAX - - lda A2osX.CPUTYPE - bne .1 >LDAXI MSG.CPU.KO jsr PrintCStrAX bra * -*-------------------------------------- -.1 lda MACHID - and #MACHID.TYPE - cmp #MACHID.TYPE.IIc - beq A2osX.Prefix - - >LDAXI MSG.CPU.SPEED - jsr PrintCStrAX - stz A2osX.RANDOM16 - stz A2osX.RANDOM16+1 - - php - sei - -.2 bit VBL - bpl .2 - -.21 bit VBL - bmi .21 - - ldx #0 Count LO - lda #0 Count HI - -.3 ldy #3 (2) - -.4 nop (2) - dey (2) - bne .4 (2*) - - inc A2osX.RANDOM16 (6) - bne .5 (2*) - - inc A2osX.RANDOM16+1 (6) - bit VBL (4) - bpl .3 (2*) - bmi .6 - -.5 nop (2) - nop (2) - nop (2) - bit VBL (4) - bpl .3 (2*) - -.6 plp - - stz A2osX.CPUSPEED - -.7 sec - lda A2osX.RANDOM16 - sbc #100 - tax - lda A2osX.RANDOM16+1 - sbc /100 - bcc .8 - - stx A2osX.RANDOM16 - sta A2osX.RANDOM16+1 - inc A2osX.CPUSPEED - bra .7 - -.8 lda A2osX.RANDOM16 - sta A2osX.CPUSPEED+1 - pha push CPU speed LO - lda A2osX.CPUSPEED - pha push CPU speed HI - >LDAXI MSG.CPU.SPEEDOK +.2 >LDAXI MSG.CPU.OK jsr PrintCStrAX *-------------------------------------- A2osX.Prefix >LDAXI MSG.BOOTPREFIX @@ -204,103 +128,44 @@ A2osX.RamDrv >LDAXI MSG.RAMDRV bne .1 >LDAXI MSG.RAMDRV.KO0 jsr PrintCStrAX - bra A2osX.Z80 + bra A2osX.SetupQC .1 >LDAXI MSG.RAMDRV.KO1 jsr PrintCStrAX - bra A2osX.Z80 + bra A2osX.SetupQC .2 >LDAXI MSG.RAMDRV.OK jsr PrintCStrAX *-------------------------------------- -A2osX.Z80 >LDAXI MSG.Z80 - jsr PrintCStrAX - jsr InitZ80 - bcs .1 - pha Push Z80Slot - - >LDAXI MSG.Z80.OK - jsr PrintCStrAX - bra A2osX.SetupQC - -.1 >LDAXI MSG.Z80.KO - jsr PrintCStrAX -*-------------------------------------- A2osX.SetupQC lda RRAMWRAMBNK2 lda RRAMWRAMBNK2 ldx #0 + .1 lda A2osX.QC.B.Start,x sta $D100,x lda A2osX.QC.B.Start+$100,x sta $D200,x + lda A2osX.QC.B.Start+$200,x + sta $D300,x inx bne .1 - ldx #$C0 -.2 lda A2osX.GP.B.start-1,x - sta $D300-1,x - dex - bne .2 - - ldx #$20 -.3 lda $BEE0-1,x - sta $D3E0-1,x - dex - bne .3 - lda RROMBNK1 *-------------------------------------- A2osX.EnumKM >LDAXI MSG.KMENUM jsr PrintCStrAX jsr EnumKM *-------------------------------------- -A2osX.MLIQuit >LDAXI MSG.STAGE0OK +A2osX.MLIQuit >LDAXI MSG.INIT0OK jsr PrintCStrAX >DEBUGOA - jsr MLI .DA #MLIQUIT .DA MLIQUIT01 bra * *-------------------------------------- -* Out: -* Y = 0, 6502 -* Y = 1, 65C02 -* Y = 2, R65C02 -* Y = 3, 65C816 -*-------------------------------------- -Init6502 ldy #0 Test 6502 BCD bug - sed - lda #$99 - clc - adc #$01 - cld - bmi .9 BUG!, we have 6502 - - ldy #3 test 65C816 TYX Instruction - ldx #0 - .OP 65816 - tyx TYX: if 65C816, x becomes non-zero - .OP 65C02 - bne .9 worked! 65C816 - - dey y=2 -> R65C02 - ldx $EA save zp $EA - stz $EA store 0 in $EA -* .OP 65R02 - .HS F7EA For compatibility with A2osX.ASM -* smb 7,$EA if not Rockwell, assemble as nop nop -* .OP 65C02 - asl $EA cs if Rockwell - stx $EA restore zp $EA - bcs .9 - - dey y=1 -> 65C02 - -.9 rts -*-------------------------------------- DisableRamDRV php sei lda DEVPTRS3D2 @@ -354,74 +219,167 @@ DisableRamDRV php lda #0 Not detected sec rts +EnumKM.EPB .EQ $0D +EnumKM.EL .EQ $27 *-------------------------------------- -InitZ80 ldx #Z80Code.Size -.1 lda Z80Code.Start-1,x - sta $1000-1,x 00000H for Z80 +EnumKM ldx #0 + ldy Boot.Prefix +.1 inx + lda SYS,x + sta Boot.Prefix+1,y + iny + cpx SYS + bne .1 + + sty Boot.Prefix + + jsr MLI + .DA #MLIOPEN + .DA MLIOPEN01 + bcs .99 + + lda MLIOPEN01+5 + sta MLIREAD01+1 + sta MLICLOSE01+1 + +.2 jsr MLI + .DA #MLIREAD + .DA MLIREAD01 + bcs .98 + + lda #EnumKM.EPB + sta EnumKM.EC + >LDYAI A2osX.ReadBuff+4 + >STYA EnumKM.BPTR + +.3 >LDYA EnumKM.BPTR + >STYA TmpPtr1 + lda (TmpPtr1) + and #$F0 Empty ? + beq .5 yes, skip + and #$C0 anything out of type 1,2 or 3 ? + bne .5 yes, skip + lda (TmpPtr1) + and #$0F + cmp KM.PREFIX at least enough chars for KM.*? + bcc .5 no, skip + ldy #$10 file type + lda (TmpPtr1),y + cmp #$06 'BIN'? + bne .5 skip + ldy KM.PREFIX +.4 lda (TmpPtr1),y + cmp KM.PREFIX,y + bne .5 + dey + bne .4 + + jsr LoadKM + +.5 lda EnumKM.BPTR + clc + adc #EnumKM.EL + sta EnumKM.BPTR + bcc .6 + inc EnumKM.BPTR+1 + +.6 dec EnumKM.EC + bne .3 + bra .2 + +.8 jsr MLI + .DA #MLICLOSE + .DA MLICLOSE01 + rts + +.98 cmp #MLI.ERR.EOF + beq .8 + pha + jsr .8 + pla +.99 sec + rts +*-------------------------------------- +EnumKM.EC .BS 1 +EnumKM.BPTR .BS 2 +*-------------------------------------- +LoadKM ldx Boot.Prefix +.1 lda Boot.Prefix,x + sta KM.Filename,x dex bne .1 - stz TmpPtr1 - lda #$C1 - sta TmpPtr1+1 - -.2 sta (TmpPtr1) - lda $100D - bmi .8 - inc TmpPtr1+1 - lda TmpPtr1+1 - cmp #$C8 - beq .9 - clc - adc #$20 - sta $100A - bra .2 - -.8 lda TmpPtr1+1 + ldx Boot.Prefix + lda (TmpPtr1) and #$0F - sta A2osX.Z80Slot + tay clc - rts + adc Boot.Prefix + sta KM.Filename + tax -.9 stz A2osX.Z80Slot +.2 lda (TmpPtr1),y + sta KM.Filename,x + dex + dey + bne .2 + + >LDAXI MSG.KMLOAD + jsr PrintCStrAX + >LDAXI KM.Filename + jsr PrintPStrAX + jsr CROUT + + jsr MLI + .DA #MLIOPEN + .DA MLIOPEN02 + bcs .99 + + lda MLIOPEN02+5 + sta MLIREAD02+1 + sta MLICLOSE02+1 + + jsr MLI + .DA #MLIREAD + .DA MLIREAD02 + bcs .98 + jsr .9 + + jsr A2osX.KMLOAD + jsr CROUT + +.98 pha + jsr .9 + pla sec rts + +.9 jsr MLI + .DA #MLICLOSE + .DA MLICLOSE02 +.99 rts *-------------------------------------- - .INB A2OSX.S.KM - .INB A2OSX.S.TOOLS + .INB X.PRINTF.S *-------------------------------------- -MSG.STAGE0 >CSTRING "A2osX[Stage0]:Init\n" +MSG.INIT0 >CSTRING "A2osX[Stage0]:Init\n" MSG.SYSMEM >CSTRING "Checking System Memory..." MSG.SYSMEM.OK >CSTRING "128k Detected.\n" MSG.SYSMEM.KO >CSTRING "A2osX Requires At Least 128k Memory.\n" -MSG.HZ >CSTRING "Kernel SYS Timer Setup For %d0 hz.\n" + MSG.CPU >CSTRING "Checking CPU..." +MSG.CPU.OK >CSTRING "65C02 CPU (or higher) Detected.\n" MSG.CPU.KO >CSTRING "A2osX Requires At Least A 65C02 CPU.\n" -MSG.CPU.SPEED >CSTRING "Detecting CPU Speed..." -MSG.CPU.SPEEDOK >CSTRING "%d.%02d Mhz.\n" -MSG.BOOTPREFIX >CSTRING "Boot Prefix:" + MSG.RAMDRV >CSTRING "Checking ProDOS RamDrive..." MSG.RAMDRV.OK >CSTRING "Successfully Disabled.\n" MSG.RAMDRV.KO0 >CSTRING "Not Detected.\n" MSG.RAMDRV.KO1 >CSTRING "Uninstall Failed !!!\n" -MSG.Z80 >CSTRING "Detecting Z80 CPU..." -MSG.Z80.OK >CSTRING "Detected In Slot %d.\n" -MSG.Z80.KO >CSTRING "Not Detected.\n" + +MSG.BOOTPREFIX >CSTRING "Boot Prefix:" + MSG.KMENUM >CSTRING "Looking For Kernel Modules...\n" MSG.KMLOAD >CSTRING "***Loading KM : " -MSG.STAGE0OK >CSTRING "A2osX[Stage0]:Complete.\n" -MSG.CPUTYPEL .DA #MSG.6502 - .DA #MSG.65C02 - .DA #MSG.65R02 - .DA #MSG.65816 -MSG.CPUTYPEH .DA /MSG.6502 - .DA /MSG.65C02 - .DA /MSG.65R02 - .DA /MSG.65816 -MSG.6502 >CSTRING "6502.\n" -MSG.65C02 >CSTRING "65C02.\n" -MSG.65R02 >CSTRING "65R02.\n" -MSG.65816 >CSTRING "65816.\n" +MSG.INIT0OK >CSTRING "A2osX[Stage0]:Complete.\n" *-------------------------------------- MLIGETPREFIX01 .DA #1 .DA Boot.Prefix @@ -459,23 +417,11 @@ MLIQUIT01 .DA #4 *-------------------------------------- SYS >PSTRING "SYS/" KM.PREFIX >PSTRING "KM." -*-------------------------------------- -Z80Code.Start .HS 31FFFF START: LD SP,0FFFFH Init Stack - .HS 3EFF LD A,0FFH Set Flag - .HS 320D00 LD (FLAG),A - .HS 3200E1 LD (0E100H),A Back to 6502 - .HS 18F3 JR START Loop - .HS 00 FLAG: .DB 0 -Z80Code.End .EQ * -Z80Code.Size .EQ Z80Code.End-Z80Code.Start *-------------------------------------- .EP -A2osX.End .EQ * -A2osX.SIZE .EQ A2osX.End-A2osX.Start - .BS $1000-A2osX.SIZE *-------------------------------------- +A2osX.QC.B.Start .INB A2OSX.S.QC - .INB A2OSX.S.GP *-------------------------------------- MAN SAVE A2OSX.S diff --git a/A2osX.STARTUP.txt b/A2osX.STARTUP.txt index ea9aa1c5..0f896e10 100644 --- a/A2osX.STARTUP.txt +++ b/A2osX.STARTUP.txt @@ -8,27 +8,27 @@ echo Env: SET # Main Screen INSDRV CONSOLE.DRV -STARTPROC GETTY CON SBIN/LOGIN +STARTPROC GETTY CON ${A2OSX}SBIN/LOGIN # Serial Login #INSDRV SSC.I.DRV 9600 N 8 1 X -#STARTPROC GETTY COM2 SBIN/LOGIN +#STARTPROC GETTY COM2 LOGIN #INSDRV PIC.DRV # Network Section -INSDRV UTHERNET.DRV 000E3A123456 -INSDRV UTHERNET2.DRV 0008DC123456 +#INSDRV UTHERNET.DRV 000E3A123456 +#INSDRV UTHERNET2.DRV 0008DC123456 #INSDRV UTHER2.AI.DRV 0008DC123456 #INSDRV LANCEGS.DRV -STARTPROC TCPIP -STARTPROC DHCPCLNT +#STARTPROC TCPIP +#STARTPROC DHCPCLNT #STARTPROC HTTPD #TELNETD #MOUNT TFTP 192.168.1.5:/A2OSX /MNT/A2OSX #MOUNT CIFS 192.168.1.5:/MSSHARE /MNT/MSSHARE # End Network Section # GUI Section -#INSDRV DHGR.DRV -#INSDRV MOUSE.DRV -#DESKTOP +INSDRV DHGR.DRV +INSDRV MOUSE.DRV +STARTPROC DESKTOP # End GUI Section ECHO *** End A2osX Startup file *** MAN diff --git a/BIN/ASM.S.FIO.txt b/BIN/ASM.S.FIO.txt index 2f3038eb..0556ea72 100644 --- a/BIN/ASM.S.FIO.txt +++ b/BIN/ASM.S.FIO.txt @@ -70,7 +70,8 @@ FIO.OpenFileA sta FIO.hFileName bra FIO.OpenFileA.Exit .10 lda FIO.hFileName - >SYSCALL SYS.MLIOpenA + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.MLIOpenYA bcs .99 pha @@ -91,7 +92,8 @@ FIO.OpenFileA sta FIO.hFileName sta (pData),y lda FIO.hFileName - >SYSCALL SYS.MLIGetFileInfoA + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.MLIGetFileInfoYA bcs .99 >STYA ZPPtr1 diff --git a/BIN/ASM.S.txt b/BIN/ASM.S.txt index 1f0f888e..818233f3 100644 --- a/BIN/ASM.S.txt +++ b/BIN/ASM.S.txt @@ -1,6 +1,6 @@ PR#3 PREFIX /A2OSX.SRC -NEW +LOMEM $C00 INC 1 AUTO 6 .LIST OFF diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index 6c8456d0..eacae668 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -131,7 +131,8 @@ CS.INIT stz hFile .2 ldy #hFileName sta (pData),y - >SYSCALL SYS.LoadFileA + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.LoadFileYA bcs .3 stx hFile @@ -415,7 +416,8 @@ SaveFile >PUSHWI 0 Aux type .1 ldy #hFileName lda (pData),y - >SYSCALL SYS.MLIOpenA + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.MLIOpenYA bcs .9 sta hFile stx TmpByte diff --git a/BIN/LSDEV.S.txt b/BIN/LSDEV.S.txt index 9058c9ac..560fbf08 100644 --- a/BIN/LSDEV.S.txt +++ b/BIN/LSDEV.S.txt @@ -41,8 +41,10 @@ L.MSG1 .DA MSG1 *-------------------------------------- CS.INIT >LDYA L.LIBSTR >SYSCALL SYS.LoadLibYA - bcs .9 - sta hLIBSTR + bcc .1 + rts + +.1 sta hLIBSTR >LDYAI DevMgr.Table >STYA ZPPTR1 @@ -51,23 +53,27 @@ CS.INIT >LDYA L.LIBSTR >PUSHW L.MSG0 >LIBCALL hLIBSTR,LIBSTR.PRINTF -.1 lda (ZPPTR1) +.2 lda (ZPPTR1) cmp #$D8 bne .8 + ldy #S.DEV.JMP+1 + >PUSHB (ZPPTR1),y + dey + >PUSHB (ZPPTR1),y + lda ZPPTR1 clc adc #S.DEV.NAME - sta ZPPTR2 + tay lda ZPPTR1+1 adc #0 - sta ZPPTR2+1 - >PUSHW ZPPTR2 + >PUSHYA ldy #S.DEV.F - lda (ZPPTR1),y push flags - >PUSHA - >PUSHB DEV.ID + >PUSHB (ZPPTR1),y + ldy #S.DEV.ID + >PUSHB (ZPPTR1),y >PUSHW L.MSG1 >LIBCALL hLIBSTR,LIBSTR.PRINTF @@ -81,7 +87,7 @@ CS.INIT >LDYA L.LIBSTR .3 inc DEV.ID lda DEV.ID cmp #K.DEV.MAX - bne .1 + bne .2 .8 lda #0 tell TSKMGR that all done ok, but .9 sec we do not want to stay in memory @@ -98,8 +104,8 @@ CS.QUIT lda hLIBSTR *-------------------------------------- CS.END LIBSTR >PSTRING "libstr.o" -MSG0 >CSTRING "ID Flags Name\n" -MSG1 >CSTRING "%03d %b %4S\n" +MSG0 >CSTRING "ID Flags Name Address\n" +MSG1 >CSTRING "%03d %b %4S $%H\n" hLIBSTR .BS 1 DEV.ID .BS 1 MAN diff --git a/BIN/MD.S.txt b/BIN/MD.S.txt index 198d43fb..728b26da 100644 --- a/BIN/MD.S.txt +++ b/BIN/MD.S.txt @@ -62,7 +62,8 @@ CS.INIT stz hFullPath >SYSCALL SYS.PStrCat sta hFullPath -.2 >SYSCALL SYS.MLICreateDirA +.2 >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.MLICreateDirYA php pha jsr .98 diff --git a/BIN/NFSMOUNT.S.txt b/BIN/NFSMOUNT.S.txt new file mode 100644 index 00000000..0f6a3b23 --- /dev/null +++ b/BIN/NFSMOUNT.S.txt @@ -0,0 +1,109 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF + .OP 65C02 + .OR $2000 + .TF /A2OSX.BOOT/BIN/NFSMOUNT +*-------------------------------------- + .INB INC/MACROS.I + .INB INC/A2OSX.I + .INB INC/LIBTCPIP.I +*-------------------------------------- +TIMEOUT.MAX .EQ 40 40*100ms = 4 sec. +*-------------------------------------- +ZPIPCfgPtr .EQ ZPBIN +ZPFrameBase .EQ ZPBIN+2 +*-------------------------------------- +* 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 Length To Relocate + .DA DS.END-DS.START Data Segment to Allocate + .DA 0 + .DA 0 +*-------------------------------------- +.1 .DA CS.INIT + .DA CS.RUN + .DA CS.DOEVENT + .DA CS.QUIT +L.LIBTCPIP .DA LIBTCPIP +L.MSG.USAGE .DA MSG.USAGE + .DA 0 +*-------------------------------------- +CS.INIT ldy #S.PS.hARGS + lda (pPs),y + beq .99 + + >LIBCALL hLIBTCPIP,LIBTCPIP.GET.IPCFG is TCPIP loaded ? + bcs .99 + >STYA ZPIPCfgPtr + + lda (ZPIPCfgPtr) Configured ? + bpl .99 + + ldx #3 + ldy #S.IPCFG.IP+3 +.1 lda (ZPIPCfgPtr),y + sta Socket.Src.Addr,x + dey + dex + bpl .1 + + lda (pPs) + ora #S.PS.F.EVENT Now accept events + sta (pPs) + clc + rts + +.99 >LDYA L.MSG.USAGE + >SYSCALL SYS.PSTROutYA + lda #SYSMGR.ERRSYN + sec + rts + +*-------------------------------------- +CS.RUN +CS.RUN.ERROR sec + rts +*-------------------------------------- +CS.DOEVENT +.8 clc + rts + +.9 sec + rts +*-------------------------------------- +CS.QUIT lda hLIBTCPIP + >SYSCALL SYS.UnloadLibA + clc + rts +*-------------------------------------- +CS.END +MSG.USAGE >PSTRING "Usage : NFSMOUNT [HOST | IP]/export /mountvol\n" +LIBTCPIP >PSTRING "libtcpip.o" +hLIBTCPIP .BS 1 +Socket .DA #S.SOCKET.SOCK.DGRAM + .BS 3 +Socket.Src.Addr .BS 4 +Socket.Src.Port .DA 0 Dynamic +Socket.Dst.Addr .BS 4 +Socket.Dst.Port .DA UDP.PORT.PMAP + .BS 16 +*-------------------------------------- + .DUMMY + .OR 0 +DS.START +bCTRLC .BS 1 +DS.END + .ED +*-------------------------------------- +MAN +SAVE BIN/NFSMOUNT.S +ASM diff --git a/BIN/TEST.S.txt b/BIN/TEST.S.txt index 0018eb3f..791924c9 100644 --- a/BIN/TEST.S.txt +++ b/BIN/TEST.S.txt @@ -108,8 +108,6 @@ CS.RUN ldy #bCTRLC *-------------------------------------- CS.DOEVENT lda (pEvent) - >DEBUG - bpl .1 is it a TIMER event? ora #'T' diff --git a/DRV/CONSOLE.DRV.S.txt b/DRV/CONSOLE.DRV.S.txt index 784def0a..efe157f4 100644 --- a/DRV/CONSOLE.DRV.S.txt +++ b/DRV/CONSOLE.DRV.S.txt @@ -39,9 +39,6 @@ L.MSG.DETECT .DA MSG.DETECT Dev.Detect >LDYA L.MSG.DETECT >SYSCALL SYS.PSTROutYA - lda A2osX.SCREENS - ora #A2osX.SCREENS.C - sta A2osX.SCREENS clc rts CS.END @@ -51,10 +48,11 @@ MSG.DETECT >PSTRING "Apple IIe/IIc 80 Col Driver.\n" *-------------------------------------- DEV.HEADER cld jmp (DRV.CS.START,x) + .HS 00 DevID .DA #S.DEV.F.EVENT+S.DEV.F.COUT+S.DEV.F.CHAR >PSTRING "CON" NAME .HS 00 NAME must Be 5 bytes long - .HS 00.00 + .HS 00 .HS 00.00.00.00 *-------------------------------------- * Driver Code @@ -65,6 +63,7 @@ DRV.CS.START .DA OPEN .DA CLOSE .DA GETINFO .DA IRQ + .DA SELECT L.DEVINFO .DA DEVINFO *-------------------------------------- J.CtrlChars .DA BS 8 @@ -92,12 +91,15 @@ OPEN stz CURON stz OutPtr stz OutCnt + ldy #S.DEV.ID + lda (pDev),y + sta A2osX.SCRNDEVS + + jsr SELECT + lda #1 + sta A2osX.ASCREEN jsr RESET jsr HOME - - lda #A2osX.SCREENS.C - >SYSCALL SYS.ScreenSelectA - clc rts *-------------------------------------- @@ -110,16 +112,17 @@ GETEVENT lda A2osX.TIMER16 .1 jsr Char.Out.Get bcc .7 - lda A2osX.ASCREEN - and #A2osX.SCREENS.C is screen active? - beq .9 - >SYSCALL SYS.GetKeyboardEvent bcs .9 ldy #S.EVT.DATAHI lda (pEvent),y bne .8 + + lda A2osX.ASCREEN + cmp #1 + bne .9 + dey lda (pEvent),y @@ -172,6 +175,14 @@ COUT bit bEscMode jsr SetCharAtXY jmp FSOUT *-------------------------------------- +SELECT sta SETTEXT + sta SETALTCHAR + sta SET80DISP + sta CLR80STORE + sta CLRPAGE2 + clc + rts +*-------------------------------------- COUT.Ctrl ldy #0 ldx #0 @@ -300,10 +311,7 @@ COUT.ExecEscSeq stz EscSeqParamCnt .5 jmp (J.EscSequences,x) *-------------------------------------- -CLOSE -* lda A2osX.SCREENS -* and #$FF^A2osX.SCREENS.C -* sta A2osX.SCREENS +CLOSE stz A2osX.SCRNDEVS clc rts *-------------------------------------- @@ -621,8 +629,8 @@ CUROFF lda CURON beq CUREXIT.RTS CURBLNK lda A2osX.ASCREEN - and #A2osX.SCREENS.C - bne CURBLNK1 + cmp #1 + beq CURBLNK1 lda CURON bne CURBLNK.OFF diff --git a/DRV/DHGR.DRV.S.txt b/DRV/DHGR.DRV.S.txt index 1f235295..5430bb68 100644 --- a/DRV/DHGR.DRV.S.txt +++ b/DRV/DHGR.DRV.S.txt @@ -35,10 +35,6 @@ L.MSG.DETECT .DA MSG.DETECT Dev.Detect >LDYA L.MSG.DETECT >SYSCALL SYS.PSTROutYA - lda A2osX.SCREENS - ora #A2osX.SCREENS.G - sta A2osX.SCREENS - clc rts CS.END @@ -48,10 +44,11 @@ MSG.DETECT >PSTRING "\nApple IIe/IIc DHGR Driver.\n" *-------------------------------------- DEV.HEADER cld jmp (DRV.CS.START,x) + .HS 00 DevID .DA #S.DEV.F.EVENT >PSTRING "GFX" NAME .HS 00 NAME must Be 5 bytes long - .HS 00.00 + .HS 00 .HS 00.00.00.00 *-------------------------------------- * Driver Code @@ -62,6 +59,7 @@ DRV.CS.START .DA OPEN .DA CLOSE .DA GETINFO .DA IRQ + .DA SELECT .DA SETPIXEL .DA GETPIXEL .DA HLINE @@ -71,47 +69,24 @@ DRV.CS.START .DA OPEN L.DEVINFO .DA DEVINFO .DA 0 end or relocation *-------------------------------------- -OPEN lda #A2osX.SCREENS.G - >SYSCALL SYS.ScreenSelectA - - ldx #192 +OPEN ldy #S.DEV.ID + lda (pDev),y + sta A2osX.SCRNDEVS+2 -.81 dex - - lda BASEL,x - sta ZPBASE - lda BASEH,x - sta ZPBASE+1 - -* lda #$55 - lda #$00 - - ldy #39 - sta SETWRITEAUX -.82 sta (ZPBASE),y - dey - bpl .82 - -* lda #$2A - lda #$00 - - ldy #39 - sta CLRWRITEAUX -.83 sta (ZPBASE),y - dey - bpl .83 + jsr SELECT + lda #3 + sta A2osX.ASCREEN - txa - bne .81 clc rts *-------------------------------------- GETEVENT lda A2osX.ASCREEN - and #A2osX.SCREENS.G is screen active? - beq .9 + cmp #3 + bne .9 >SYSCALL SYS.GetKeyboardEvent bcs .9 + rts .9 lda #0 Error = no event @@ -129,6 +104,24 @@ GETINFO >LDYA L.DEVINFO clc rts *-------------------------------------- +SELECT sta CLRTEXT + sta CLRMIXED + sta SETHIRES + sta CLR80STORE + sta CLRPAGE2 + sta SETIOUDIS + sta SETDHIRES + +* sta CLR80DISP +* sta SETDHIRES +* sta CLRDHIRES +* sta SET80DISP +* sta SETDHIRES +* sta CLRDHIRES +* sta SETDHIRES + clc + rts +*-------------------------------------- * SETPIXEL * PULLB = Mode * 00000001=B/W @@ -162,6 +155,7 @@ SETPIXEL.XOR >PULLYA Y=X.LO,A=X.HI .3 lsr tay + sta CLRPAGE2 bcs .4 odd=main ram sta SETPAGE2 diff --git a/DRV/MOUSE.DRV.S.txt b/DRV/MOUSE.DRV.S.txt index 8ffbba40..7e4f261e 100644 --- a/DRV/MOUSE.DRV.S.txt +++ b/DRV/MOUSE.DRV.S.txt @@ -117,14 +117,18 @@ CS.END MSG.DETECT >PSTRING "Apple Mouse Card/IIc Mouse Driver.\n" MSG.DETECT.OK >PSTRING "Mouse Installed As Device : " MSG.DETECT.KO >PSTRING "No Mouse Found.\n" +DEVSIG.Offset .HS 05070B0CFB +DEVSIG.Value .HS 38180120D6 +DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset *-------------------------------------- * Device Header (16 Bytes) *-------------------------------------- DEV.HEADER cld jmp (DRV.CS.START,x) + .HS 00 DevID .DA #S.DEV.F.EVENT DEV.HEADER.NAME >PSTRING "MOU1" NAME - .HS 00.00 + .HS 00 .HS 00.00.00.00 *-------------------------------------- * Driver Code @@ -135,6 +139,7 @@ DRV.CS.START .DA OPEN .DA CLOSE .DA GETINFO .DA IRQ + .DA SELECT L.DEVINFO .DA DEVINFO .DA 0 end or relocation *-------------------------------------- @@ -181,8 +186,8 @@ OPEN rts *-------------------------------------- GETEVENT lda A2osX.ASCREEN - and #A2osX.SCREENS.G is screen active? - beq .9 + cmp #3 is DHGR screen active? + bne .9 php sei @@ -245,7 +250,9 @@ GETEVENT lda A2osX.ASCREEN rts *-------------------------------------- COUT -IRQ sec +IRQ +SELECT lda #DEVMGR.ERRUNSUP + sec rts *-------------------------------------- CLOSE php @@ -272,9 +279,6 @@ GOMOUSE pha jmp (ZPGoMouse) *-------------------------------------- DRV.CS.END -DEVSIG.Offset .HS 05070B0CFB -DEVSIG.Value .HS 38180120D6 -DEVSIG.Length .EQ DEVSIG.Value-DEVSIG.Offset DEVSLOT0n .BS 1 DEVSLOTn0 .BS 1 DEVSLOTCn .BS 1 diff --git a/DRV/UTHER2.AI.DRV.S.txt b/DRV/UTHER2.AI.DRV.S.txt index 6713bb53..82d6eea9 100644 --- a/DRV/UTHER2.AI.DRV.S.txt +++ b/DRV/UTHER2.AI.DRV.S.txt @@ -41,10 +41,10 @@ W5100.AR.RCR .EQ $0019 W5100.AR.RMSR .EQ $001A W5100.AR.TMSR .EQ $001B W5100.AR.PATR .EQ $001C -W5100.AR.PTIMER .EQ $0028 -W5100.AR.PMAGIC .EQ $0029 -W5100.AR.UIPR .EQ $002A -W5100.AR.UPORT .EQ $002E +*W5100.AR.PTIMER .EQ $0028 +*W5100.AR.PMAGIC .EQ $0029 +*W5100.AR.UIPR .EQ $002A +*W5100.AR.UPORT .EQ $002E W5100.AR.S0.MR .EQ $0400 W5100.AR.S0.MR.MULTI .EQ $80 W5100.AR.S0.MR.MF .EQ $40 @@ -183,9 +183,10 @@ hArgs .BS 1 *-------------------------------------- DEV.HEADER cld jmp (DRV.CS.START,x) + .HS 00 .DA #S.DEV.F.SHARE+S.DEV.F.EVENT DEV.HEADER.NAME >PSTRING "ETH1" NAME - .HS 00.00 + .HS 00 .HS 00.00.00.00 *-------------------------------------- * Driver Code diff --git a/DRV/UTHERNET.DRV.S.txt b/DRV/UTHERNET.DRV.S.txt index 42990dac..6b0d078e 100644 --- a/DRV/UTHERNET.DRV.S.txt +++ b/DRV/UTHERNET.DRV.S.txt @@ -43,14 +43,14 @@ PP.RxCTL.ExtradataA .EQ %01000000.00000000 PP.TxCFG .EQ $0106 Transmit Configuration (RW) PP.TxCMD .EQ $0108 Receiver Control (RW) PP.TxCMD.LID .EQ %00000000.00001001 -PP.TxCMD.TxStart5 .EQ %00000000.00000000 -PP.TxCMD.TxStart381 .EQ %00000000.01000000 -PP.TxCMD.TxStart1021 .EQ %00000000.10000000 +*PP.TxCMD.TxStart5 .EQ %00000000.00000000 +*PP.TxCMD.TxStart381 .EQ %00000000.01000000 +*PP.TxCMD.TxStart1021 .EQ %00000000.10000000 PP.TxCMD.TxStartFULL .EQ %00000000.11000000 -PP.TxCMD.Force .EQ %00000001.00000000 -PP.TxCMD.OneColl .EQ %00000010.00000000 -PP.TxCMD.InhibitCRC .EQ %00010000.00000000 -PP.TxCMD.TxPadDis .EQ %00100000.00000000 +*PP.TxCMD.Force .EQ %00000001.00000000 +*PP.TxCMD.OneColl .EQ %00000010.00000000 +*PP.TxCMD.InhibitCRC .EQ %00010000.00000000 +*PP.TxCMD.TxPadDis .EQ %00100000.00000000 PP.BufCFG .EQ $010A PP.LineCTL .EQ $0112 Line Control (RW) PP.LineCTL.LID .EQ %00000000.00010011 @@ -200,9 +200,10 @@ hArgs .BS 1 *-------------------------------------- DEV.HEADER cld jmp (DRV.CS.START,x) + .HS 00 .DA #S.DEV.F.SHARE+S.DEV.F.EVENT DEV.HEADER.NAME >PSTRING "ETH1" NAME - .HS 00.00 + .HS 00 .HS 00.00.00.00 *-------------------------------------- * Driver Code @@ -241,7 +242,6 @@ OPEN jsr Reset >STYA PacketPagePTR,x >LDYAI PP.LineCTL.LID+PP.LineCTL.SerRxOn+PP.LineCTL.SerTxOn+PP.LineCTL.Auto >STYA PacketPageDATA,x - clc rts *-------------------------------------- @@ -252,7 +252,6 @@ GETEVENT ldx DEVSLOTx0 and /PP.RxEvent.RxOK+PP.RxEvent.Brdcast+PP.RxEvent.IA bne GETEVENT.RxOK lda #ERR.DEV.NOFRAME - COUT IRQ SETIPCFG @@ -443,18 +442,15 @@ Reset ldx DEVSLOTx0 >LDYAI PP.SelfCTL.LID+PP.SelfCTL.RESET >STYA PacketPageDATA,x rts -*-------------------------------------- DRV.CS.END *-------------------------------------- DEVSLOTx0 .BS 1 Size .BS 2 Counter .BS 2 -*-------------------------------------- DEVINFO .DA #S.DEVINFO.TYPE.NET DEVFLAGS .DA #0 MAC .BS 6 LINK.STATUS .BS 1 OK/DUPLEX/SPEED -*-------------------------------------- MAN SAVE DRV/UTHERNET.DRV.S ASM diff --git a/DRV/UTHERNET2.DRV.S.txt b/DRV/UTHERNET2.DRV.S.txt index bd1c2c02..3b12f546 100644 --- a/DRV/UTHERNET2.DRV.S.txt +++ b/DRV/UTHERNET2.DRV.S.txt @@ -183,9 +183,10 @@ hArgs .BS 1 *-------------------------------------- DEV.HEADER cld jmp (DRV.CS.START,x) + .HS 00 .DA #S.DEV.F.SHARE+S.DEV.F.EVENT DEV.HEADER.NAME >PSTRING "ETH1" NAME - .HS 00.00 + .HS 00 .HS 00.00.00.00 *-------------------------------------- * Driver Code diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index 5852b1ae..23e629c8 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -113,30 +113,26 @@ pLibJmp .EQ $BE16 *-------------------------------------- MLICALL.PARAMS .EQ $BEC0 *-------------------------------------- -* $BEE0->$BEFF : Public Variables +* $BEE0->$BEEF : Public Variables *-------------------------------------- -A2osX.SCREENS .EQ $BEE0 -A2osX.SCREENS.S .EQ %00000001 System Screen -A2osX.SCREENS.C .EQ %00000010 Console Screen -A2osX.SCREENS.G .EQ %00000100 Graphic Screen -A2osX.SCREENS.2 .EQ %00001000 Graphic Screen2 -A2osX.ASCREEN .EQ $BEE1 Active Screen +A2osX.ASCREEN .EQ $BEE0 Active Screen +A2osX.SCRNDEVS .EQ $BEE1 -> $BEE4 (4 devices) -A2osX.SCRNDEVS .EQ $BEE2 -> $BEE5 (4 devices) A2osX.CPUTYPE .EQ $BEE6 A2osX.CPUSPEED .EQ $BEE7 (->255.99 Mhz) A2osX.Z80SLOT .EQ $BEEA -A2osX.HZ .EQ $BEEB - A2osX.TIMER16 .EQ $BEEC A2osX.RANDOM16 .EQ $BEEE *-------------------------------------- +* $BEF0->$BEFF : Kernel Config Block +*-------------------------------------- +A2osX.HZ .EQ $BEF0 +*-------------------------------------- * Kernel Entry Point *-------------------------------------- -KERNEL.SYSCALL .EQ $D000 -KERNEL.COLDBOOT .EQ $D100 +KERNEL.SYSCALL .EQ $E000 *-------------------------------------- H.BIN.HEADER .EQ 0 H.BIN.HEADER.DRV65 .EQ $4CD8 6502:cld,jmp abs @@ -161,8 +157,10 @@ SYS.FreeMemA .EQ $02 SYS.GetMemPtrA .EQ $04 SYS.GetMemByIDA .EQ $06 -SYS.GetMemByNameA .EQ $08 -SYS.GetMemByNameYA .EQ $0A +SYS.GetMemByNameYA .EQ $08 +SYS.LoadStockObjectYA .EQ $0A +SYS.GetStockObjectA .EQ $0C +SYS.FreeStockObject .EQ $0E *-------------------------------------- SYS.NewPStrYA .EQ $10 SYS.PStrCpyA .EQ $12 @@ -174,14 +172,14 @@ SYS.PStrGetTkn .EQ $18 SYS.GetArgCount .EQ $1C SYS.GetArgA .EQ $1E *-------------------------------------- -SYS.LoadBinA .EQ $20 + SYS.LoadLibYA .EQ $22 SYS.UnloadLibA .EQ $24 SYS.LoadDrvA .EQ $26 *-------------------------------------- SYS.ExpandPStrA .EQ $30 SYS.ExpandPStrYA .EQ $32 -SYS.GetEnvVarA .EQ $34 +SYS.PutEnvYA .EQ $34 SYS.GetEnvVarYA .EQ $36 SYS.SetEnvVarH .EQ $38 @@ -190,23 +188,21 @@ SYS.DelEnvVarA .EQ $3C SYS.DelEnvVarYA .EQ $3E *-------------------------------------- SYS.MLICreateFile .EQ $40 -SYS.MLICreateDirA .EQ $42 + SYS.MLICreateDirYA .EQ $44 -SYS.MLIDestroyA .EQ $46 SYS.MLIDestroyYA .EQ $48 SYS.MLIRename .EQ $4A SYS.MLISetFileInfo .EQ $4C -SYS.MLIGetFileInfoA .EQ $4E + SYS.MLIGetFileInfoYA .EQ $50 SYS.MLIOnline .EQ $52 -SYS.MLISetPrefixA .EQ $54 + SYS.MLISetPrefixYA .EQ $56 -SYS.MLIGetPrefixA .EQ $58 SYS.MLIGetPrefixYA .EQ $5A -SYS.MLIOpenA .EQ $5C + SYS.MLIOpenYA .EQ $5E SYS.MLINewLine .EQ $60 @@ -230,7 +226,7 @@ SYS.MLIReadBlock .EQ $7C SYS.MLIWriteBlock .EQ $7E *-------------------------------------- SYS.GetDevByIDA .EQ $80 -SYS.GetDevByNameA .EQ $82 + SYS.GetDevByNameYA .EQ $84 SYS.GetDevInfoA .EQ $86 @@ -247,7 +243,7 @@ SYS.Sleep .EQ $9C *-------------------------------------- SYS.CheckPrefixA .EQ $A0 SYS.FileSearch .EQ $A2 -SYS.LoadFileA .EQ $A4 + SYS.LoadFileYA .EQ $A6 SYS.ListDirInitA .EQ $A8 @@ -260,16 +256,41 @@ SYS.SetNetCfg .EQ $B2 SYS.GetNetCfgA .EQ $B4 SYS.ClrNetCfgA .EQ $B6 *-------------------------------------- -SYS.ScreenSelectA .EQ $C0 +*SYS.ScreenSelectA .EQ $C0 *-------------------------------------- SYS.COutA .EQ $D0 -SYS.PSTROutA .EQ $D2 + SYS.PSTROutYA .EQ $D4 SYS.HexOutA .EQ $D8 SYS.HexOutYA .EQ $DA SYS.DecOutA .EQ $DC SYS.DecOutYA .EQ $DE + +*SYS.FGETC .EQ $F0 +*SYS.FGETS .EQ $F2 +*SYS.FPUTC .EQ $F4 +*SYS.FPUTS .EQ $F6 +*-------------------------------------- +SYS.FOPEN .EQ $E0 +SYS.FCLOSE .EQ $E2 +SYS.FREAD .EQ $E4 +SYS.FWRITE .EQ $E6 + +SYS.FFLUSH .EQ $E8 +SYS.FSEEK .EQ $EA +SYS.FTELL .EQ $EC +SYS.FEOF .EQ $EE + +SYS.REMOVE .EQ $F0 +SYS.RENAME .EQ $F2 +SYS.OPENDIR .EQ $F4 +SYS.READDIR .EQ $F6 + +SYS.CLOSEDIR .EQ $F8 +SYS.MKDIR .EQ $FA +SYS.MKNOD .EQ $FC +SYS.MKFIFO .EQ $FE *-------------------------------------- S.FINFO.ACCESS .EQ $00 S.FINFO.TYPE .EQ $01 @@ -324,6 +345,7 @@ DEVMGR.ERROOH .EQ $EE Out Of Handle Error DEVMGR.ERRICL .EQ $ED Invalid Command Line DEVMGR.ERRNOHW .EQ $EC No Hardware DEVMGR.ERRDNF .EQ $EB Device Not Found Error +DEVMGR.ERRUNSUP .EQ $EA Unsupported Function *-------------------------------------- TSKMGR.ERROOH .EQ $DF Out Of Handle Error TSKMGR.ERRNSP .EQ $DD No Such Process Error @@ -353,9 +375,10 @@ S.MEM.SIZE .EQ 8 *-------------------------------------- * DEV STRUCT *-------------------------------------- -S.DEV.CODE .EQ 0 -S.DEV.JMP .EQ 2 -S.DEV.F .EQ 4 +S.DEV.CODE .EQ 0 cld,jmp... +S.DEV.JMP .EQ 2 ...(code,x) +S.DEV.ID .EQ 4 +S.DEV.F .EQ 5 S.DEV.F.INUSE .EQ %10000000 S.DEV.F.BUSY .EQ %01000000 S.DEV.F.SHARE .EQ %00100000 Device is shareable @@ -364,7 +387,7 @@ S.DEV.F.EVENT .EQ %00001000 Device is event driven S.DEV.F.COUT .EQ %00000100 Device supports Char OUT S.DEV.F.BLOCK .EQ %00000010 S.DEV.F.CHAR .EQ %00000001 -S.DEV.NAME .EQ 5 5 Bytes : LEN+NUL KBD CON COMx LPTx ETHx +S.DEV.NAME .EQ 6 5 Bytes : LEN+NUL KBD CON COMx LPTx ETHx * S.DEV.SIZE .EQ 16 *-------------------------------------- @@ -393,9 +416,7 @@ DEVMGR.CLOSE .EQ 6 DEVMGR.GETINFO .EQ 8 DEVMGR.IRQ .EQ 10 *-------------------------------------- -* 'XY' Class Driver Functions -*-------------------------------------- -DEVMGR.XY.SETPOS .EQ 12 +DEVMGR.SELECT .EQ 12 *-------------------------------------- * 'NET' Class Driver Functions *-------------------------------------- @@ -404,11 +425,11 @@ DEVMGR.SETIPCFG .EQ 14 *-------------------------------------- * 'GFX' Class Driver Functions *-------------------------------------- -DEVMGR.GFX.SETPIXEL .EQ 12 -DEVMGR.GFX.GETPIXEL .EQ 14 -DEVMGR.GFX.HLINE .EQ 16 -DEVMGR.GFX.VLINE .EQ 18 -DEVMGR.GFX.BITBLT .EQ 20 +DEVMGR.GFX.SETPIXEL .EQ 14 +DEVMGR.GFX.GETPIXEL .EQ 16 +DEVMGR.GFX.HLINE .EQ 18 +DEVMGR.GFX.VLINE .EQ 20 +DEVMGR.GFX.BITBLT .EQ 22 *-------------------------------------- * PS STRUCT *-------------------------------------- diff --git a/LIB/LIBTCPIP.S.TCP.txt b/LIB/LIBTCPIP.S.TCP.txt index 2e315737..47e8fb58 100644 --- a/LIB/LIBTCPIP.S.TCP.txt +++ b/LIB/LIBTCPIP.S.TCP.txt @@ -121,27 +121,27 @@ TCP.IN.LISTEN.NEW phy pha - - ldy #S.SOCKET.STATUS - lda #S.SOCKET.STATUS.SYNRCVD - sta (ZPPtrSKT),y - txa - ldy #S.SOCKET.PARENT - sta (ZPPtrSKT),y + + jsr SKT.AddToQueueL pla sta ZPPtrSKT+1 pla sta ZPPtrSKT - jsr TCP.SendSYNACK + bcc .3 - - - - clc + lda #0 error + sta (ZPPtrSKT) clear this socket + lda #ERR.SKT.OOS .9 rts + +.3 ldy #S.SOCKET.STATUS + lda #S.SOCKET.STATUS.SYNRCVD + sta (ZPPtrSKT),y + + jmp TCP.SendSYNACK *-------------------------------------- TCP.IN.ESTABLISHED stx hSocket @@ -204,13 +204,6 @@ TCP.IN.ESTABLISHED ldy #S.SOCKET.SQ.hOutMem sta (ZPPtrSKT),y - ldy #S.SOCKET.PARENT - lda (ZPPtrSKT),y - jsr SKT.GetA - - lda hSocket - jsr SKT.AddToQueueL - .8 clc rts diff --git a/SBIN/DESKTOP.S.txt b/SBIN/DESKTOP.S.txt index 940ad974..6ca80e1e 100644 --- a/SBIN/DESKTOP.S.txt +++ b/SBIN/DESKTOP.S.txt @@ -31,16 +31,20 @@ CS.START cld .DA CS.QUIT L.DEVNAME.GFX .DA DEVNAME.GFX L.DEVNAME.MOUSE .DA DEVNAME.MOUSE +L.MSG.INIT .DA MSG.INIT .DA 0 *-------------------------------------- -CS.INIT >LDYA L.DEVNAME.GFX +CS.INIT >LDYA L.MSG.INIT + >SYSCALL SYS.PSTROutYA + + >LDYA L.DEVNAME.GFX >SYSCALL SYS.GetDevByNameYA bcc .10 rts .10 stx hDevGFX >STYA pDevGFX - + .11 >LDYA L.DEVNAME.MOUSE >SYSCALL SYS.GetDevByNameYA bcc .20 @@ -54,17 +58,27 @@ CS.INIT >LDYA L.DEVNAME.GFX .20 stx hDevMouse >STYA pDevMouse - + ldx #DEVMGR.OPEN jsr GoDevMouse - bcs * + + lda pDev + pha + lda pDev+1 + pha + + lda pDevGFX + sta pDev + lda pDevGFX+1 + sta pDev+1 ldx #DEVMGR.OPEN jsr GoDevGFX - bcs * - - lda #A2osX.SCREENS.G - >SYSCALL SYS.ScreenSelectA + + pla + sta pDev+1 + pla + sta pDev * jmp .8 @@ -108,8 +122,10 @@ CS.INIT >LDYA L.DEVNAME.GFX beq .8 and #$7 bne .1 + dec C bpl .1 + lda #15 sta C bra .1 @@ -153,7 +169,7 @@ CS.DOEVENT ldy #S.EVT.hDEV lda (pEvent),y >PUSHA X.LO - >PUSHBI 2 Mode:1=B/W,2=16 colors,...,128=XOR + >PUSHBI 128 Mode:1=B/W,2=16 colors,...,128=XOR ldx #DEVMGR.GFX.SETPIXEL jsr GoDevGFX @@ -172,6 +188,7 @@ GoDevMouse jmp (pDevMouse) CS.END DEVNAME.GFX >PSTRING "GFX" DEVNAME.MOUSE >PSTRING "MOU1" +MSG.INIT >PSTRING "DESKTOP:Init...\n" hDevGFX .BS 1 pDevGFX .BS 2 hDevMouse .BS 1 diff --git a/SBIN/GETTY.S.txt b/SBIN/GETTY.S.txt index 0f5476d2..175f6af2 100644 --- a/SBIN/GETTY.S.txt +++ b/SBIN/GETTY.S.txt @@ -52,10 +52,12 @@ CS.INIT ldy #S.PS.hARGS bcs .99 sta hDEVNAME - >SYSCALL SYS.GetDevByNameA + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.GetDevByNameYA bcs .98 >STYA pDev + txa ldy #S.PS.hINDEV sta (pPs),y @@ -67,20 +69,22 @@ CS.INIT ldy #S.PS.hARGS lda hDEVNAME >SYSCALL SYS.FreeMemA + ldx #DEVMGR.OPEN + jsr pDevJmp + bcs .99 + ldy #S.PS.hARGS lda (pPs),y >PUSHA >PUSHBI $20 Push SEP=' ' - >PUSHBI 2 Push 3 for getting BIN + >PUSHBI 2 Push 2 for getting BIN >SYSCALL SYS.PStrGetTkn bcs .99 ldy #hBinName sta (pData),y - - ldx #DEVMGR.OPEN - jsr pDevJmp if error CS, else... - rts ...Tell TskMgr To stay in memory + clc + rts .98 pha lda hDEVNAME @@ -89,25 +93,23 @@ CS.INIT ldy #S.PS.hARGS sec .99 rts *-------------------------------------- -CS.RUN lda #12 try send a FF... +CS.RUN lda #13 try send a CR... >SYSCALL SYS.COutA Device Is Ready ? bcs .8 no..loop... - -.1 >LDYA L.MSG.GREETINGS + + lda pDev + clc + adc #S.DEV.NAME + tay + lda pDev+1 + adc /S.DEV.NAME + >PUSHYA + >LDYA L.MSG.GREETINGS >SYSCALL SYS.PSTROutYA bcs .8 unable to send greetings...loop.. - ldy #S.PS.hOUTDEV - lda (pPs),y - >SYSCALL SYS.HexOutA - bcs .8 - - lda #13 - >SYSCALL SYS.COutA - bcs .8 - ldy #hBinName lda (pData),y ldy #0 @@ -125,14 +127,14 @@ CS.QUIT ldy #hBinName >SYSCALL SYS.FreeMemA ldx #DEVMGR.CLOSE - jsr pDevJmp +* jsr pDevJmp clc rts *-------------------------------------- CS.END MSG.USAGE >PSTRING "GETTY " -MSG.GREETINGS >PSTRING "\e[12h\nA2osX-GeTTY on Dev=" +MSG.GREETINGS >PSTRING "\e[12h\nA2osX-GeTTY on Dev=%S\n" hDEVNAME .BS 1 *-------------------------------------- .DUMMY diff --git a/SBIN/INSDRV.S.txt b/SBIN/INSDRV.S.txt index c3d0fdaf..b3dea2c5 100644 --- a/SBIN/INSDRV.S.txt +++ b/SBIN/INSDRV.S.txt @@ -43,8 +43,7 @@ CS.INIT ldy #S.PS.hARGS >SYSCALL SYS.PSTROutYA bra .8 -.1 sta hArgs - >SYSCALL SYS.LoadDrvA +.1 >SYSCALL SYS.LoadDrvA bcs .9 @@ -60,7 +59,6 @@ CS.QUIT clc *-------------------------------------- CS.END MSG.HELP >PSTRING "Usage: insdrv file.drv \n" -hArgs .BS 1 MAN SAVE SBIN/INSDRV.S ASM diff --git a/SBIN/SHELL.S.CMD.txt b/SBIN/SHELL.S.CMD.txt index c826482e..a395b70d 100644 --- a/SBIN/SHELL.S.CMD.txt +++ b/SBIN/SHELL.S.CMD.txt @@ -120,7 +120,8 @@ EXEC.CMD.EXT ldy #1 .10 bcs .9 sta hFullCmd - >SYSCALL SYS.MLIGetFileInfoA + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.MLIGetFileInfoYA bcs .9 >STYA ZPPTR1 @@ -170,7 +171,8 @@ EXEC.CMD.CD lda hExecArgs bne EXEC.CMD.CD.C ldy #S.PS.hPREFIX lda (pPs),y - >SYSCALL SYS.PSTROutA + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.PSTROutYA lda #13 >SYSCALL SYS.COutA clc @@ -342,16 +344,19 @@ EXEC.CMD.SETVAR >PUSHA Push Cmd Line bra .97 .4 lda hVarName - >SYSCALL SYS.GetEnvVarA + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.GetEnvVarYA bcs .97 sta hVarValue lda hVarName - >SYSCALL SYS.PSTROutA + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.PSTROutYA lda #'=' >SYSCALL SYS.COutA lda hVarValue - >SYSCALL SYS.PSTROutA + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.PSTROutYA lda #13 >SYSCALL SYS.COutA @@ -392,7 +397,8 @@ EXEC.CMD.ECHO lda hExecArgs bcs .99 pha - >SYSCALL SYS.PSTROutA + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.PSTROutYA lda #13 >SYSCALL SYS.COutA pla @@ -406,7 +412,8 @@ EXEC.CMD.ECHO lda hExecArgs *-------------------------------------- EXEC.CMD.TYPE lda hExecArgs beq .98 - >SYSCALL SYS.LoadFileA + >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.LoadFileYA bcs .99 >STYA ZPPTR2 store file len diff --git a/SBIN/SHELL.S.txt b/SBIN/SHELL.S.txt index adfb69e3..9dd8cd17 100644 --- a/SBIN/SHELL.S.txt +++ b/SBIN/SHELL.S.txt @@ -378,7 +378,8 @@ CmdBuffer.DEL lda (pData) sta (pData) .9 rts *-------------------------------------- -OpenTxtFileA >SYSCALL SYS.MLIOpenA +OpenTxtFileA >SYSCALL SYS.GetMemPtrA + >SYSCALL SYS.MLIOpenYA bcs .9 ldy #hInputFile diff --git a/SYS/KERNEL.S.BIN.txt b/SYS/KERNEL.S.BIN.txt index bfc72516..5471fc9a 100644 --- a/SYS/KERNEL.S.BIN.txt +++ b/SYS/KERNEL.S.BIN.txt @@ -30,8 +30,8 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path .2 dey bne .1 - lda S.LoadBinA.hFilename - jsr S.GetMemByNameA + >LDYA ZPQuickPtr1 + jsr S.GetMemByNameYA bcs .3 not already loaded >STYA ZPQuickPtr1 Save base address @@ -49,8 +49,8 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path clc rts -.3 lda S.LoadBinA.hFilename - jsr S.LoadFileA +.3 >LDYA ZPQuickPtr1 + jsr S.LoadFileYA bcc .4 rts Error Loading file @@ -68,7 +68,8 @@ S.LoadBinA sta S.LoadBinA.hFilename save file path sta R.AH lda S.LoadBinA.hFilename - jsr S.MLIGetFileInfoA Get File Info for AUXTYPE + jsr S.GetMemPtrA + jsr S.MLIGetFileInfoYA Get File Info for AUXTYPE bcs .98 >STYA ZPQuickPtr2 diff --git a/SYS/KERNEL.S.CIO.txt b/SYS/KERNEL.S.CIO.txt index 372192d5..60087441 100644 --- a/SYS/KERNEL.S.CIO.txt +++ b/SYS/KERNEL.S.CIO.txt @@ -117,7 +117,6 @@ S.COutA.RTS rts * \e : ESC * \n : CR *-------------------------------------- -S.PSTROutA jsr S.GetMemPtrA S.PSTROutYA >STYA ZPQuickPtr1 ldy #0 diff --git a/SYS/KERNEL.S.CPU.txt b/SYS/KERNEL.S.CPU.txt new file mode 100644 index 00000000..3bb3fa46 --- /dev/null +++ b/SYS/KERNEL.S.CPU.txt @@ -0,0 +1,200 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +CPU.Init >LDAXI MSG.CPU + jsr PrintCStrAX + + jsr Detect6502 A = CPU type + sta A2osX.CPUTYPE + lda MSG.CPUTYPEH,y + tax + lda MSG.CPUTYPEL,y + jsr PrintCStrAX + +CPU.Init.Speed lda MACHID + and #MACHID.TYPE + cmp #MACHID.TYPE.IIc + beq CPU.Init.Z80 + + >LDAXI MSG.CPU.SPEED + jsr PrintCStrAX + + stz A2osX.RANDOM16 + stz A2osX.RANDOM16+1 + + php + sei + +.1 bit VBL + bpl .2 + +.2 bit VBL + bmi .2 + + ldx #0 Count LO + lda #0 Count HI + +.3 ldy #3 (2) + +.4 nop (2) + dey (2) + bne .4 (2*) + + inc A2osX.RANDOM16 (6) + bne .5 (2*) + + inc A2osX.RANDOM16+1 (6) + bit VBL (4) + bpl .3 (2*) + bmi .6 + +.5 nop (2) + nop (2) + nop (2) + bit VBL (4) + bpl .3 (2*) + +.6 plp + + stz A2osX.CPUSPEED + +.7 sec + lda A2osX.RANDOM16 + sbc #100 + tax + lda A2osX.RANDOM16+1 + sbc /100 + bcc .8 + + stx A2osX.RANDOM16 + sta A2osX.RANDOM16+1 + inc A2osX.CPUSPEED + bra .7 + +.8 lda A2osX.RANDOM16 + sta A2osX.CPUSPEED+1 + pha push CPU speed LO + lda A2osX.CPUSPEED + pha push CPU speed HI + >LDAXI MSG.CPU.SPEEDOK + jsr PrintCStrAX + +CPU.Init.Z80 >LDAXI MSG.Z80 + jsr PrintCStrAX + jsr DetectZ80 + bcs .9 + sta A2osX.Z80SLOT + pha Push Z80Slot + + >LDAXI MSG.Z80.OK + jsr PrintCStrAX + rts + +.9 >LDAXI MSG.Z80.KO + jsr PrintCStrAX + rts +*-------------------------------------- +* Out: +* A = $60, 6502 +* A = $61, 65C02 +* A = $62, R65C02 +* A = $63, 65C816 +*-------------------------------------- +Detect6502 ldy #0 Test 6502 BCD bug + sed + lda #$99 + clc + adc #$01 + cld + bmi .9 BUG!, we have 6502 + + ldy #3 test 65C816 TYX Instruction + ldx #0 + .OP 65816 + tyx TYX: if 65C816, x becomes non-zero + .OP 65C02 + bne .9 worked! 65C816 + + dey y=2 -> R65C02 + ldx $EA save zp $EA + stz $EA store 0 in $EA +* .OP 65R02 + .HS F7EA For compatibility with A2osX.ASM +* smb 7,$EA if not Rockwell, assemble as nop nop +* .OP 65C02 + asl $EA cs if Rockwell + stx $EA restore zp $EA + bcs .9 + + dey y=1 -> 65C02 + +.9 tya + ora #$60 + rts +*-------------------------------------- +* Out: +* A = Z80 Slot +*-------------------------------------- +DetectZ80 ldx #Z80Code.Size +.1 lda Z80Code.Start-1,x + sta $1000-1,x 00000H for Z80 + dex + bne .1 + + stz ZPQuickPtr1 + lda #$C1 + sta ZPQuickPtr1+1 + +.2 sta (ZPQuickPtr1) + lda $100D + bmi .8 + inc ZPQuickPtr1+1 + lda ZPQuickPtr1+1 + cmp #$C8 + beq .9 CS + clc + adc #$20 + sta $100A + bra .2 + +.8 lda ZPQuickPtr1+1 + and #$0F + clc +.9 rts +*-------------------------------------- +Z80Code.Start .HS 31FFFF START: LD SP,0FFFFH Init Stack + .HS 3EFF LD A,0FFH Set Flag + .HS 320D00 LD (FLAG),A + .HS 3200E1 LD (0E100H),A Back to 6502 + .HS 18F3 JR START Loop + .HS 00 FLAG: .DB 0 +Z80Code.End .EQ * +Z80Code.Size .EQ Z80Code.End-Z80Code.Start +*-------------------------------------- +MSG.CPU >CSTRING "Checking CPU..." +MSG.CPU.SPEED >CSTRING "Detecting CPU Speed..." +MSG.CPUTYPEL .DA #MSG.6502 + .DA #MSG.65C02 + .DA #MSG.65R02 + .DA #MSG.65816 +MSG.CPUTYPEH .DA /MSG.6502 + .DA /MSG.65C02 + .DA /MSG.65R02 + .DA /MSG.65816 +MSG.6502 >CSTRING "6502.\n" +MSG.65C02 >CSTRING "65C02.\n" +MSG.65R02 >CSTRING "65R02.\n" +MSG.65816 >CSTRING "65816.\n" +MSG.CPU.SPEEDOK >CSTRING "%d.%02d Mhz.\n" +MSG.Z80 >CSTRING "Detecting Z80 CPU..." +MSG.Z80.OK >CSTRING "Detected In Slot %d.\n" +MSG.Z80.KO >CSTRING "Not Detected.\n" +*-------------------------------------- +MAN +SAVE SYS/KERNEL.S.CPU +LOAD SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.DEV.txt b/SYS/KERNEL.S.DEV.txt index 761eb7d8..c7e4c262 100644 --- a/SYS/KERNEL.S.DEV.txt +++ b/SYS/KERNEL.S.DEV.txt @@ -5,25 +5,7 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- -DevMgr.HiMem .EQ $FFFE Protect IRQ vector in Aux LC -*-------------------------------------- -* S.DevMgrInit -*-------------------------------------- -S.DevMgrInit ldx #S.DEV.SIZE*DevMgr.Count -.1 lda DevMgr.NUL-1,x - sta DevMgr.Table-1,x - dex - bne .1 - - stz DevMgr.Table+S.DEV.SIZE*DevMgr.Count+1 - - lda #DevMgr.Count-1 - sta DevMgr.LastDevID - - >LDYAI DevMgr.End - >STYA DevMgr.Free - clc - rts +DevMgr.HiMem .EQ $FFFA Protect IRQ vectors in Aux LC *-------------------------------------- * S.GetDevByIDA * IN: @@ -66,7 +48,6 @@ S.GetDevByIDA.T .BS 1 * X = DEVID * Y,A = pDev *-------------------------------------- -S.GetDevByNameA jsr S.GetMemPtrA S.GetDevByNameYA >STYA ZPQuickPtr1 >LDYAI DevMgr.Table+S.DEV.NAME @@ -126,36 +107,42 @@ DevMgr.SYS.BASL0 .EQ $800 *-------------------------------------- DevMgr.NUL cld jmp (DevMgr.NUL.Code,x) + .DA #0 DevID=0 .DA #S.DEV.F.INUSE+S.DEV.F.SHARE+S.DEV.F.COUT+S.DEV.F.CHAR >PSTRING "NUL" NAME .HS 00 NAME must Be 5 bytes long - .HS 00.00 + .HS 00 .HS 00.00.00.00 *-------------------------------------- DevMgr.SYS cld jmp (DevMgr.SYS.Code,x) + .DA #1 DevID=1 .DA #S.DEV.F.INUSE+S.DEV.F.EVENT+S.DEV.F.SHARE+S.DEV.F.COUT+S.DEV.F.CHAR >PSTRING "SYS" NAME .HS 00 NAME must Be 5 bytes long - .HS 00.00 + .HS 00 .HS 00.00.00.00 *-------------------------------------- -DevMgr.NUL.Code .DA .8 OPEN - .DA .8 GETEVENT +DevMgr.NUL.Code .DA DevMgr.Unsup OPEN + .DA DevMgr.Unsup GETEVENT .DA .8 COUT - .DA .8 CLOSE - .DA .8 GETINFO - .DA .8 IRQ + .DA DevMgr.Unsup CLOSE + .DA DevMgr.Unsup GETINFO + .DA DevMgr.Unsup IRQ + .DA DevMgr.Unsup SELECT .8 clc rts *-------------------------------------- DevMgr.SYS.Code .DA DevMgr.SYS.Open .DA DevMgr.SYS.GetEvent .DA DevMgr.SYS.COut - .DA .8 CLOSE - .DA .8 GETINFO - .DA .8 IRQ -.8 clc + .DA DevMgr.Unsup CLOSE + .DA DevMgr.Unsup GETINFO + .DA DevMgr.Unsup IRQ + .DA DevMgr.SYS.Select +*-------------------------------------- +DevMgr.Unsup lda #DEVMGR.ERRUNSUP + sec rts *-------------------------------------- DevMgr.SYS.Open stz DevMgr.SYS.CPULOADI @@ -180,28 +167,27 @@ DevMgr.SYS.Open stz DevMgr.SYS.CPULOADI jsr DevMgr.SYS.Home - lda A2osX.SCREENS - ora #A2osX.SCREENS.S - sta A2osX.SCREENS - lda #A2osX.SCREENS.S - jsr S.ScreenSelectA + lda #1 + sta A2osX.SCRNDEVS+1 + + jsr DevMgr.SYS.Select clc rts *-------------------------------------- DevMgr.SYS.GetEvent lda A2osX.ASCREEN - and #A2osX.SCREENS.S is screen active? - beq .9 + cmp #2 is SYS active? + bne .9 ldx DevMgr.SYS.CPULOADI lda DevMgr.SYS.CPULOADC,x sta DevMgr.SYS.BASL0+38 - dec DevMgr.SYS.CPULOADI + dex bpl .1 - lda #3 - sta DevMgr.SYS.CPULOADI + ldx #3 +.1 stx DevMgr.SYS.CPULOADI -.1 jsr S.GetKeyboardEvent + jsr S.GetKeyboardEvent bcs .9 rts @@ -239,6 +225,15 @@ DevMgr.SYS.COut phx clc rts *-------------------------------------- +DevMgr.SYS.Select + sta SETTEXT + sta SETALTCHAR + sta SET80DISP + sta CLR80STORE + sta SETPAGE2 + clc + rts +*-------------------------------------- DevMgr.SYS.FSOut lda DevMgr.SYS.CH cmp #79 diff --git a/SYS/KERNEL.S.DRV.txt b/SYS/KERNEL.S.DRV.txt index 07062575..a0ae9a3b 100644 --- a/SYS/KERNEL.S.DRV.txt +++ b/SYS/KERNEL.S.DRV.txt @@ -18,27 +18,28 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn bcc .1 rts -.1 sta LoadDrv.Cmd - stx LoadDrv.Args +.1 sta S.LoadDrv.Name + stx S.LoadDrv.Args >LDYAI ENV.DRV push ENVNAME=DRV jsr S.GetEnvVarYA get value for ENV=$DRV bcs .98 - sta LoadDrv.Path - >PUSHB LoadDrv.Cmd push CMD for S.FileSearch - >PUSHB LoadDrv.Path + sta S.LoadDrv.Srch + + >PUSHB S.LoadDrv.Name push CMD for S.FileSearch + >PUSHB S.LoadDrv.Srch jsr S.FileSearch find File in $DRV bcs .97 not Found - sta LoadDrv.FullName + sta S.LoadDrv.FullName jsr S.LoadBinA bcs .96 >STYA pDrv - stx LoadDrv.hMem + stx S.LoadDrv.hMem - lda LoadDrv.Args + lda S.LoadDrv.Args jsr S.LoadDrvA.Jmp call Dev.Detect bcs .95 @@ -56,24 +57,24 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn rts .95 pha - lda LoadDrv.hMem + lda S.LoadDrv.hMem jsr S.FreeMemA pla .96 pha - lda LoadDrv.FullName + lda S.LoadDrv.FullName jsr S.FreeMemA pla .97 pha - lda LoadDrv.Path + lda S.LoadDrv.Srch jsr S.FreeMemA pla .98 pha - lda LoadDrv.Args + lda S.LoadDrv.Args jsr S.FreeMemA - lda LoadDrv.Cmd + lda S.LoadDrv.Name jsr S.FreeMemA pla @@ -82,11 +83,11 @@ S.LoadDrvA >PUSHA push Cmd Line for S.PStrGetTkn *-------------------------------------- S.LoadDrvA.Jmp jmp (pDrv) *-------------------------------------- -LoadDrv.Cmd .BS 1 -LoadDrv.Args .BS 1 -LoadDrv.Path .BS 1 -LoadDrv.FullName .BS 1 -LoadDrv.hMem .BS 1 +S.LoadDrv.Name .BS 1 +S.LoadDrv.Args .BS 1 +S.LoadDrv.Srch .BS 1 +S.LoadDrv.FullName .BS 1 +S.LoadDrv.hMem .BS 1 *-------------------------------------- * pDrv = .DRV File Loaded Address *-------------------------------------- @@ -231,6 +232,10 @@ S.InsDrv.Move ldy #H.BIN.DEV.HEADER.O dey bpl .1 + lda DevMgr.LastDevID Save Dev.ID in the driver for SELECT + ldy #S.DEV.ID + sta (pDev),y + ldy #H.BIN.DRV.CODE.O lda (pDrv),y clc @@ -270,6 +275,7 @@ S.InsDrv.Move ldy #H.BIN.DEV.HEADER.O bra .2 .8 rts *-------------------------------------- +ENV.DRV >PSTRING "DRV" S.InsDrv.DrvLen .BS 2 S.InsDrv.DrvEnd .BS 2 *-------------------------------------- diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 8cd4e6f5..7dd6f9f3 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -140,64 +140,42 @@ S.ExpandPStrA.VC S.ExpandPStrA.Start .BS 1 S.ExpandPStrA.End .BS 1 *-------------------------------------- -* S.CreateEnv -* in : -* out : -* A = hMem to new env -*-------------------------------------- -S.CreateEnv >PUSHWI K.ENV.SIZE get a buffer for ENV - >PUSHBI 0 - jsr S.GetMem create it... - bcs .9 - >STYA ZPQuickPtr1 - lda #0 - sta (ZPQuickPtr1) - txa - clc -.9 rts -*-------------------------------------- * S.DupEnvA * In: * A = ENV hMem To Duplicate * Out: * A = hMem to new ENV *-------------------------------------- -S.DupEnvA pha - jsr S.GetMemPtrA +S.DupEnvA jsr S.GetMemPtrA >STYA ZPQuickPtr1 - pla >PUSHWI K.ENV.SIZE >PUSHBI 0 jsr S.GetMem bcs .9 >STYA ZPQuickPtr2 - phx -.1 lda (ZPQuickPtr1) - sta (ZPQuickPtr2) + + ldy #0 + +.1 lda (ZPQuickPtr1),y + sta (ZPQuickPtr2),y beq .8 - inc ZPQuickPtr1 - bne .2 - inc ZPQuickPtr1+1 -.2 inc ZPQuickPtr2 + + iny bne .1 + inc ZPQuickPtr1+1 inc ZPQuickPtr2+1 bra .1 -.8 pla + +.8 txa clc .9 rts *-------------------------------------- -* S.GetEnvVarA -* In: -* A = hMem to NAME (PSTRING) -*-------------------------------------- * S.GetEnvVarYA * In: * Y,A = PTR to NAME (PSTRING) * Out: * A = hMem to VALUE (PSTRING) 0,"" if not exist *-------------------------------------- -S.GetEnvVarA >PULLA - jsr S.GetMemPtrA S.GetEnvVarYA >STYA ZPQuickPtr2 jsr S.FindVar bcc .1 @@ -212,6 +190,7 @@ S.GetEnvVarYA >STYA ZPQuickPtr2 txa clc rts + .1 lda (ZPQuickPtr1) get NAME=VALUE len sec sbc (ZPQuickPtr2) substract (NAME len) @@ -345,6 +324,14 @@ S.SetEnvVar >STYA ZPQuickPtr3 ZPQuickPtr3 = VALUE sec rts *-------------------------------------- +* S.PutEnvYA +* In: +* Y,A = PTR To Name (NAME=VALUE) +* Out: +*-------------------------------------- +S.PutEnvYA clc + rts +*-------------------------------------- * S.DelEnvVarA * In: * PULLB = hMem To Name (PSTRING) diff --git a/SYS/KERNEL.S.EVT.txt b/SYS/KERNEL.S.EVT.txt index 713c72ec..159d0d3a 100644 --- a/SYS/KERNEL.S.EVT.txt +++ b/SYS/KERNEL.S.EVT.txt @@ -5,27 +5,6 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- -* S.EvtMgrInit -*-------------------------------------- -S.EvtMgrInit lda #10 - sta EVTMGR.10TH.CNT - - lda A2osX.HZ - sta EVTMGR.HZ.CNT - - lda MACHID - and #MACHID.TYPE - cmp #MACHID.TYPE.IIc - bne .8 - -* sta CLRIOUDIS -* sta ENBVBLIIC - -.8 lda /EvtMgr.Table - sta pEvent+1 - clc - rts -*-------------------------------------- * GETEVENT : * IN : * OUT : diff --git a/SYS/KERNEL.S.FIO.txt b/SYS/KERNEL.S.FIO.txt index 8557c9ca..a2424224 100644 --- a/SYS/KERNEL.S.FIO.txt +++ b/SYS/KERNEL.S.FIO.txt @@ -47,14 +47,16 @@ S.FileSearch >PULLA Get Search path rts .10 sta S.FileSearch.hSrch Store Expanded path list to search - + >PULLB S.FileSearch.hFile Store Filename + lda #1 sta S.FileSearch.Idx Start At Token 1 .1 >PUSHB S.FileSearch.hSrch push expanded path list - >PUSHBI $3B Push SEP=';' + >PUSHBI ';' >PUSHB S.FileSearch.Idx Push Token IDX + jsr S.PStrGetTkn Get token in A bcs .98 @@ -66,7 +68,8 @@ S.FileSearch >PULLA Get Search path sta S.FileSearch.hFull Store Full path (Token Path+filename) - jsr S.MLIGetFileInfoA + jsr S.GetMemPtrA + jsr S.MLIGetFileInfoYA bcc .8 lda S.FileSearch.hFull Discard this Full Path @@ -99,14 +102,13 @@ S.FileSearch.Idx .BS 1 S.FileSearch.hPath .BS 1 S.FileSearch.hFull .BS 1 *-------------------------------------- -* S.LoadFileA +* S.LoadFileYA * in : -* A = hMem of FilePath (PSTRING) +* Y,A = FilePath (PSTRING) * out : * Y,A = File Length * X = hMem of Loaded File *-------------------------------------- -S.LoadFileA jsr S.GetMemPtrA S.LoadFileYA jsr S.ExpandPStrYA sta S.LoadFile.hExp jsr S.GetMemPtrA diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt new file mode 100644 index 00000000..ce93af4f --- /dev/null +++ b/SYS/KERNEL.S.GP.txt @@ -0,0 +1,141 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +* A2osX.SYSCALL (AUXLC to AUXLC) +* In: +* X = SYSfnc.Index +* Y,A = free for Inline param +*-------------------------------------- +A2osX.GP.Start jmp (KERNEL.SYSCALL,x) +*-------------------------------------- +* LIBCALL (AUXLC to AUXLC) +* In: +* Y = LIB.ID +* X = LIBfnc.Index +* A = free for Inline param +*-------------------------------------- + jmp A2osX.LIBCALL1 +*-------------------------------------- +* Kernel.MLICALL (AUXLC to MAINLC) +* In: +* X = MLI Function +* A = Param Count +*-------------------------------------- + jmp A2osX.MLICALL1 +*-------------------------------------- + jmp A2osX.ROMCALL1 +*-------------------------------------- + jmp BrkHandler + .BS $BE10-* +*-------------------------------------- + jmp (pDev) pDevJmp + jmp (pCode) pCodeJmp + jmp (pLib) pLibJmp + .BS $BE20-* +*-------------------------------------- +GO.Reset jsr GO.AUXLC + jmp S.KernelRun +*-------------------------------------- +A2osX.LIBCALL1 pha + phx + tya + >SYSCALL SYS.GetMemPtrA + >STYA .1+1 + plx + pla +.1 jmp $FFFF +*-------------------------------------- +A2osX.MLICALL1 jsr GO.MAINLC + stx .1 + sta MLICALL.PARAMS + jsr MLI +.1 .BS 1 + .DA MLICALL.PARAMS + jsr GO.AUXLC + rts +*-------------------------------------- +A2osX.ROMCALL1 plx + stx .1+1 + plx + stx .1+2 + ldx RROMBNK1 + jsr .1 + ldx RRAMWRAMBNK1 + ldx RRAMWRAMBNK1 + rts +.1 jmp $FFFF +*-------------------------------------- +GO.MAINLC php + clc + .HS 2C bit abs + +GO.AUXLC php + sec + sei + + sta A2osX.SaveA + pla keep P in A for later + stx A2osX.SaveX + sty A2osX.SaveY + plx + ply + inx + bne .1 + iny +.1 stx GO.EXIT.JMP+1 + sty GO.EXIT.JMP+2 + + ldx RRAMWRAMBNK1 + ldx RRAMWRAMBNK1 + + ldy pStack + bcs GO.AUXLC1 + +GO.MAINLC1 tsx + stx A2osX.SaveSX + ldx A2osX.SaveSM + txs + stx CLRALTZP + bra GO.EXIT +*-------------------------------------- +GO.AUXLC1 stx SETALTZP + tsx + stx A2osX.SaveSM + ldx A2osX.SaveSX + txs +*-------------------------------------- +GO.EXIT sty pStack + pha push P on stack + ldy A2osX.SaveY + ldx A2osX.SaveX + lda A2osX.SaveA + plp +GO.EXIT.JMP jmp $FFFF +*-------------------------------------- +A2osX.SaveA .BS 1 +A2osX.SaveX .BS 1 +A2osX.SaveY .BS 1 +*-------------------------------------- +BrkHandler sta SETPAGE2 + bra * +*-------------------------------------- +IrqHandler bra * +*-------------------------------------- +A2osX.GP.End .EQ * +*-------------------------------------- +* CONTROL SECTION : +*-------------------------------------- + .DO A2osX.GP.End>$BEBF + ERROR:GP too big + .FIN +*-------------------------------------- + .BS A2osX.GP.START+$100-* +*-------------------------------------- +MAN +SAVE SYS/KERNEL.S.GP +LOAD SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt new file mode 100644 index 00000000..7fcaa848 --- /dev/null +++ b/SYS/KERNEL.S.INIT.txt @@ -0,0 +1,190 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +* Setup MainLC ($3FE) +* +* +* Setup AuxLC $FFFE->Kernel IRQ Handler +* if irq not handled, jmp (S.IrqMgrOldFFFE) +*-------------------------------------- +S.IrqMgrInit php + sei + >LDYA $FFFE + cpy #S.IrqHandlerAuxLC + bne .1 + cmp /S.IrqHandlerAuxLC + beq .2 + +.1 >STYA S.IrqMgrOldFFFE + >LDYAI S.IrqHandlerAuxLC + >STYA $FFFE + +.2 + +* >LDYAI $BE0C +* >STYA $3F0 + + plp + clc + rts +*-------------------------------------- +S.MemMgrInit >LDYAI MemMgr.MHiMem + >STYA MemMgr.HiMem + >STYA MemMgr.Free + >LDYAI MemMgr.MLoMem + >STYA MemMgr.LoMem + stz MemMgr.LastSlot Reserve Slot #0 + + sta SETWRITEAUX + + >LDYAI MemMgr.XHiMem + >STYA MemMgr.HiMem + >STYA MemMgr.Free + >LDYAI MemMgr.XLoMem + >STYA MemMgr.LoMem + stz MemMgr.LastSlot Reserve Slot #0 + + sta CLRWRITEAUX + + clc + rts +*-------------------------------------- +* S.DevMgrInit +*-------------------------------------- +S.DevMgrInit ldx #S.DEV.SIZE*DevMgr.Count +.1 lda DevMgr.NUL-1,x + sta DevMgr.Table-1,x + dex + bne .1 + + stz DevMgr.Table+S.DEV.SIZE*DevMgr.Count+1 + + lda #DevMgr.Count-1 + sta DevMgr.LastDevID + + >LDYAI DevMgr.End + >STYA DevMgr.Free + clc + rts +*-------------------------------------- +* S.EvtMgrInit +*-------------------------------------- +S.EvtMgrInit lda #10 + sta EVTMGR.10TH.CNT + + lda A2osX.HZ + sta EVTMGR.HZ.CNT + + lda MACHID + and #MACHID.TYPE + cmp #MACHID.TYPE.IIc + bne .8 + +* sta CLRIOUDIS +* sta ENBVBLIIC + +.8 lda /EvtMgr.Table + sta pEvent+1 + clc + rts +*-------------------------------------- +* S.TskMgrInit +*-------------------------------------- +S.TskMgrInit stz TSKMGR.LASTID + lda #1 + sta TSKMGR.SIZE One Slot Busy (Kernel PS=0) + + >LDYAI TskMgr.Table Clear whole process table + >STYA pPs + + ldx #K.PS.MAX + +.1 lda #0 + ldy #S.PS.SIZE-1 + +.2 sta (pPs),y + dey + bpl .2 + + lda pPs + clc + adc #S.PS.SIZE + sta pPs + bcc .3 + + inc pPs+1 +.3 dex + bne .1 + + >LDYAI TskMgr.Table Select Process 0 (Kernel) + >STYA pPs + + lda #1 + ldy #S.PS.hINDEV + sta (pPs),y Make In DEV = SYS + ldy #S.PS.hOUTDEV + sta (pPs),y Make OUT DEV = SYS + ldy #S.PS.hERRDEV + sta (pPs),y Make ERR DEV = SYS + + >SYSCALL SYS.GetDevByIDA + >STYA pDev + ldx #DEVMGR.OPEN + jsr pDevJmp + + >PUSHWI K.ENV.SIZE get a buffer for ENV + >PUSHBI S.MEM.F.INIT0 make sure blank + >SYSCALL SYS.GetMem create it... + bcs * + + txa + ldy #S.PS.hENV + sta (pPs),y + + >LDYAI TmpBuffer256 + >SYSCALL SYS.MLIGetPrefixYA + bcs * + + >LDYAI TmpBuffer256 + >SYSCALL SYS.NewPStrYA + bcs * + + ldy #S.PS.hPREFIX + sta (pPs),y + + >PUSHWI TmpBuffer256 push ENV value + >PUSHWI I.ENV.A2osX push ENV name + >SYSCALL SYS.SetEnvVarP + bcs .9 + + >PUSHWI I.ENV.PATH.VAL + >PUSHWI I.ENV.PATH + >SYSCALL SYS.SetEnvVarP + bcs .9 + + >PUSHWI I.ENV.LIB.VAL + >PUSHWI I.ENV.LIB + >SYSCALL SYS.SetEnvVarP + bcs .9 + + >PUSHWI I.ENV.DRV.VAL + >PUSHWI I.ENV.DRV + >SYSCALL SYS.SetEnvVarP +.9 rts +*-------------------------------------- +I.ENV.A2osX >PSTRING "A2OSX" +I.ENV.PATH >PSTRING "PATH" +I.ENV.PATH.VAL >PSTRING "${A2OSX}SBIN/;${A2OSX}BIN/" +I.ENV.LIB >PSTRING "LIB" +I.ENV.LIB.VAL >PSTRING "${A2OSX}LIB/" +I.ENV.DRV >PSTRING "DRV" +I.ENV.DRV.VAL >PSTRING "${A2OSX}DRV/" +*-------------------------------------- +MAN +SAVE SYS/KERNEL.S.INIT +LOAD SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index 81d3a26a..f4e768e6 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -5,41 +5,6 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- -* Setup MainLC ($3FE) -* -* -* Setup AuxLC $FFFE->Kernel IRQ Handler -* if irq not handled, jmp (S.IrqMgrOldFFFE) -*-------------------------------------- -S.IrqMgrInit php - sei - >LDYA $FFFE - cpy #S.IrqHandlerAuxLC - bne .1 - cmp /S.IrqHandlerAuxLC - beq .2 - -.1 >STYA S.IrqMgrOldFFFE - >LDYAI S.IrqHandlerAuxLC - >STYA $FFFE - -.2 - -* >LDYAI $BE0C -* >STYA $3F0 - - plp - clc - rts -*-------------------------------------- -S.IrqMgrQuit php - sei - >LDYA S.IrqMgrOldFFFE - >STYA $FFFE - plp - cli -.8 rts -*-------------------------------------- S.BrkHandlerAuxLC bra * *-------------------------------------- diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt new file mode 100644 index 00000000..d12b1026 --- /dev/null +++ b/SYS/KERNEL.S.JMP.txt @@ -0,0 +1,157 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +* $E000-E0FF KERNEL.SYSCALL Jmp Table +*-------------------------------------- + .DA S.GetMem $00 + .DA S.FreeMemA + .DA S.GetMemPtrA + .DA S.GetMemByIDA + .DA S.GetMemByNameYA + .DA 0 + .DA 0 + .DA 0 +*-------------------------------------- + .DA S.NewPStrYA $10 + .DA S.PStrCpyA + .DA S.PStrCat + .DA S.PStrCmp + .DA S.PStrGetTkn + .DA 0 + .DA S.GetArgCount + .DA S.GetArgA +*-------------------------------------- + .DA 0 $20 + .DA S.LoadLibYA + .DA S.UnloadLibA + .DA S.LoadDrvA + .DA 0 + .DA 0 + .DA 0 + .DA 0 +*-------------------------------------- + .DA S.ExpandPStrA $30 + .DA S.ExpandPStrYA + .DA S.PutEnvYA + .DA S.GetEnvVarYA + .DA S.SetEnvVarH + .DA S.SetEnvVarP + .DA S.DelEnvVarA + .DA S.DelEnvVarYA +*-------------------------------------- + .DA S.MLICreateFile $40 + .DA 0 + .DA S.MLICreateDirYA + .DA 0 + .DA S.MLIDestroyYA + .DA S.MLIRename + .DA S.MLISetFileInfo + .DA 0 +*-------------------------------------- + .DA S.MLIGetFileInfoYA $50 + .DA S.MLIOnline + .DA 0 + .DA S.MLISetPrefixYA + .DA 0 + .DA S.MLIGetPrefixYA + .DA 0 + .DA S.MLIOpenYA +*-------------------------------------- + .DA S.MLINewLine $60 + .DA S.MLIRead + .DA S.MLIWrite + .DA S.MLICloseA + .DA S.MLIFlushA + .DA S.MLISetMark + .DA S.MLIGetMarkA + .DA S.MLISetEOF +*-------------------------------------- + .DA S.MLIGetEOFA $70 + .DA S.MLISetBuf + .DA S.MLIGetBuf + .DA S.MLIGetTime + .DA S.MLIAllocIRQ + .DA S.MLIDeallocIRQA + .DA S.MLIReadBlock + .DA S.MLIWriteBlock +*-------------------------------------- + .DA S.GetDevByIDA $80 + .DA 0 + .DA S.GetDevByNameYA + .DA S.GetDevInfoA + .DA S.GetKeyboardEvent + .DA 0 + .DA 0 + .DA 0 +*-------------------------------------- + .DA S.ExecProcessNewEnvYA $90 + .DA S.ExecProcessYA + .DA S.CreateProcessNewEnvYA + .DA S.CreateProcessYA + .DA S.GetPSByIDA + .DA 0 + .DA S.Sleep + .DA 0 +*-------------------------------------- + .DA S.CheckPrefixA $A0 + .DA S.FileSearch + .DA 0 + .DA S.LoadFileYA + .DA S.ListDirInitA + .DA S.ListDirInitYA + .DA S.ListDirNextA + .DA S.ListDirCloseA +*-------------------------------------- + .DA 0 $B0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 +*-------------------------------------- + .DA 0 $C0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 +*-------------------------------------- + .DA S.COutA $D0 + .DA 0 + .DA S.PSTROutYA + .DA 0 + .DA S.HexOutA + .DA S.HexOutYA + .DA S.DecOutA + .DA S.DecOutYA +*-------------------------------------- + .DA 0 $E0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 +*-------------------------------------- + .DA 0 $F0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 + .DA 0 +*-------------------------------------- +MAN +SAVE SYS/KERNEL.S.JMP +LOAD SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.LIB.txt b/SYS/KERNEL.S.LIB.txt index c15665f8..56c80aa2 100644 --- a/SYS/KERNEL.S.LIB.txt +++ b/SYS/KERNEL.S.LIB.txt @@ -33,7 +33,8 @@ S.LoadLibYA.hLibName .BS 1 * out : * A = hMem of Loaded Lib *-------------------------------------- -S.LoadLibA sta S.LoadLibA.hName push libname for S.FileSearch +S.LoadLibA sta S.LoadLibA.hName save libname for S.FileSearch + >LDYAI ENV.LIB push ENVNAME=LIB jsr S.GetEnvVarYA get value for ENV=LIB bcs .99 @@ -62,11 +63,15 @@ S.LoadLibA sta S.LoadLibA.hName push libname for S.FileSearch clc rts -.97 lda S.LoadLibA.hPath discard LIB PATH +.97 pha + lda S.LoadLibA.hPath discard LIB PATH jsr S.FreeMemA + pla -.98 lda S.LoadLibA.hSrch discard LIB VALUE +.98 pha + lda S.LoadLibA.hSrch discard LIB VALUE jsr S.FreeMemA + pla sec .99 rts *-------------------------------------- @@ -105,6 +110,7 @@ S.UnloadLibA pha pla jmp S.FreeMemA *-------------------------------------- +ENV.LIB >PSTRING "LIB" MAN SAVE SYS/KERNEL.S.LIB LOAD SYS/KERNEL.S diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index 44ba20db..36a505ff 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -19,33 +19,6 @@ ZPMemMgrTmp3 .EQ ZPMemMgr+6 * Garbage collector move blocks * - mem.ID=0 always used! useful to test if hMem=0 *-------------------------------------- -S.MemMgrInit >LDYAI MemMgr.MHiMem - >STYA MemMgr.HiMem - >STYA MemMgr.Free - - >LDYAI MemMgr.MLoMem - >STYA MemMgr.LoMem - - stz MemMgr.LastSlot Reserve Slot #0 - - sta SETREADAUX - sta SETWRITEAUX - - >LDYAI MemMgr.XHiMem - >STYA MemMgr.HiMem - >STYA MemMgr.Free - - >LDYAI MemMgr.XLoMem - >STYA MemMgr.LoMem - - stz MemMgr.LastSlot Reserve Slot #0 - - sta CLRREADAUX - sta CLRWRITEAUX - - clc - rts -*-------------------------------------- * PUBLIC *-------------------------------------- * S.GetMem @@ -373,13 +346,11 @@ S.GetMemByIDA stz ZPMemMgrSPtr+1 rts *-------------------------------------- * In: -* A = hMem to BINPATH (PSTR) +* Y,A = BINPATH (PSTR) * Out: * Y,A = ZPMemMgrSPtr = PTR to S.MEM * X = hMem *-------------------------------------- -S.GetMemByNameA jsr S.GetMemPtrA - bcs * S.GetMemByNameYA >STYA ZPMemMgrTmp1 save BINPATH >LDYAI MemMgr.Table diff --git a/SYS/KERNEL.S.MLI.txt b/SYS/KERNEL.S.MLI.txt index e5573752..6ed8cd35 100644 --- a/SYS/KERNEL.S.MLI.txt +++ b/SYS/KERNEL.S.MLI.txt @@ -14,7 +14,6 @@ S.MLICreateFile >PULLW MLICALL.PARAMS+1 lda #$01 Storage=Standard Files bra S.MLICreate *-------------------------------------- -S.MLICreateDirA jsr S.GetMemPtrA S.MLICreateDirYA >STYA MLICALL.PARAMS+1 lda #$C3 @@ -26,7 +25,6 @@ S.MLICreate sta MLICALL.PARAMS+7 >MLICALL MLICREATE rts *-------------------------------------- -S.MLIDestroyA jsr S.GetMemPtrA S.MLIDestroyYA >STYA MLICALL.PARAMS+1 >MLICALL MLIDESTROY rts @@ -49,14 +47,12 @@ S.MLISetFileInfo >MLICALL MLISETFILEINFO rts *-------------------------------------- -* S.MLIGetFileInfoA +* S.MLIGetFileInfoYA * in : -* A = hMem To FileName +* Y,A = FileName * out : * Y,A = PTR To Buffer (L=15) *-------------------------------------- -S.MLIGetFileInfoA - jsr S.GetMemPtrA S.MLIGetFileInfoYA >STYA MLICALL.PARAMS+1 >MLICALL MLIGETFILEINFO @@ -74,26 +70,23 @@ S.MLIOnline >PULLB MLICALL.PARAMS+1 >MLICALL MLIONLINE rts *-------------------------------------- -S.MLISetPrefixA jsr S.GetMemPtrA S.MLISetPrefixYA >STYA MLICALL.PARAMS+1 >MLICALL MLISETPREFIX rts *-------------------------------------- -S.MLIGetPrefixA jsr S.GetMemPtrA S.MLIGetPrefixYA >STYA MLICALL.PARAMS+1 >MLICALL MLIGETPREFIX rts *-------------------------------------- -* S.MLIOpenA +* S.MLIOpenYA * in : -* A = hMem To FileName +* YA = FileName * out : * A = ref_num * X = buf hMem *-------------------------------------- -S.MLIOpenA jsr S.GetMemPtrA S.MLIOpenYA >STYA MLICALL.PARAMS+1 >PUSHWI 1024 get a ProDOS IO buffer >PUSHBI S.MEM.F.ALIGN+S.MEM.F.NOMOVE diff --git a/SYS/KERNEL.S.RUN.txt b/SYS/KERNEL.S.RUN.txt new file mode 100644 index 00000000..0a822169 --- /dev/null +++ b/SYS/KERNEL.S.RUN.txt @@ -0,0 +1,107 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +S.KernelRun jsr S.TskMgrRun + bcc S.KernelRun.EVT + jsr DevMgr.SYS.Select + >LDYAI MSG.KRNLPANIC + jsr S.PSTROutYA + bra * + +S.KernelRun.EVT + jsr S.GetEvents + bcs S.KernelRun CS=no event + + jsr S.DispatchEvents + bcc S.KernelRun CC=All Events Dispatched + + jsr S.SelectProcess0 + + stz pEvent + +.1 lda (pEvent) + beq .81 + bmi .8 Discard any timer event + + bit #S.EVT.F.KEY any special key? + beq .7 + + ldy #S.EVT.DATAHI Open-Apple? + lda (pEvent),y + bpl .7 + + ldy #S.EVT.DATALO + lda (pEvent),y + + cmp #'1' + bcc .8 + cmp #'5' + bcs .8 + and #$0F + + cmp A2osX.ASCREEN + beq .8 + + tax + lda A2osX.SCRNDEVS-1,x + beq .8 + + jsr S.GetDevByIDA + bcs .8 + + >STYA pDev + ldx #DEVMGR.SELECT + jsr pDevJmp + bcs .8 + + ldy #S.EVT.DATALO + lda (pEvent),y + and #$0F + sta A2osX.ASCREEN + bra .8 + +.7 jsr S.DumpEvent + +.8 jsr S.DestroyEvent + +.81 lda pEvent + clc + adc #S.EVT + sta pEvent + lda EVTMGR.COUNT + bne .1 + jmp S.KernelRun +*-------------------------------------- +S.DumpEvent ldy #S.EVT.DATAW2+1 + >PUSHB (pEvent),y + dey + >PUSHB (pEvent),y + + ldy #S.EVT.DATAW1+1 + >PUSHB (pEvent),y + dey + >PUSHB (pEvent),y + + ldy #S.EVT.DATAHI + >PUSHB (pEvent),y + ldy #S.EVT.DATALO + >PUSHB (pEvent),y + + ldy #S.EVT.hDEV + >PUSHB (pEvent),y + + >PUSHB (pEvent) + >LDYAI MSG.DumpEvent + jmp S.PSTROutYA +*-------------------------------------- +MSG.DumpEvent >PSTRING "!Unhandled Event:Flags=%h,DevID=%h,DATALO=%h,DATAHI=%h,W1=%H,W2=%H\n" +MSG.KRNLPANIC >PSTRING "\n!!!Kernel Panic!!!\n" +*-------------------------------------- +MAN +SAVE SYS/KERNEL.S.RUN +LOAD SYS/KERNEL.S +ASM diff --git a/SYS/KERNEL.S.STR.txt b/SYS/KERNEL.S.STR.txt index 124a4d20..dd14aa8d 100644 --- a/SYS/KERNEL.S.STR.txt +++ b/SYS/KERNEL.S.STR.txt @@ -214,49 +214,51 @@ S.PStrMatch1 lda (ZPQuickPTR1) Keep Pattern Length in X * X = hMem to Remaining String After Token "Split Mode" *-------------------------------------- S.PStrGetTkn >PULLA Get IDX - sta ZPQuickPtr2+1 + sta S.PStrGetTkn.IDX >PULLA Get SEP - sta ZPQuickPtr2 + sta S.PStrGetTkn.SEP >PULLA Get PStr jsr S.GetMemPtrA >STYA ZPQuickPtr1 - ldx #0 init token count to 0 + +S.PStrGetTkn1 ldx #0 init token count to 0 ldy #0 - stz ZPQuickPtr3 init INTOKEN start to 0 + stz S.PStrGetTkn.START init INTOKEN start to 0 .1 iny lda (ZPQuickPtr1),y and #$7F - cmp ZPQuickPtr2 char=SEP ? + cmp S.PStrGetTkn.SEP char=SEP ? bne .3 no, start a new token if not alredy in - lda ZPQuickPtr3 SEP:in INTOKEN ? + lda S.PStrGetTkn.START SEP:in INTOKEN ? beq .4 no, skip this SEP inx yes, increase token count - lda ZPQuickPtr2+1 requested token=0 ? + lda S.PStrGetTkn.IDX requested token=0 ? beq .71 yes, we are in "split mode" - cpx ZPQuickPtr2+1 no,is current X=requested IDX? + cpx S.PStrGetTkn.IDX no,is current X=requested IDX? beq .71 - stz ZPQuickPtr3 reset in INTOKEN start + stz S.PStrGetTkn.START reset in INTOKEN start bra .4 -.3 lda ZPQuickPtr3 char:already INTOKEN ? +.3 lda S.PStrGetTkn.START char:already INTOKEN ? bne .4 yes, keep existing start index - sty ZPQuickPtr3 mark begining of token + sty S.PStrGetTkn.START mark begining of token .4 tya cmp (ZPQuickPtr1) end of string ? bne .1 no, get next one - lda ZPQuickPtr3 INTOKEN? + lda S.PStrGetTkn.START INTOKEN? beq .6 inx yes, last one is ending with string -.6 lda ZPQuickPtr2+1 split mode ? +.6 lda S.PStrGetTkn.IDX split mode ? beq .7 - cpx ZPQuickPtr2+1 is token = requested? + cpx S.PStrGetTkn.IDX is token = requested? beq .7 sec End of String reached, no matching token .61 rts + .71 dey move back yo end of token before this SEP -.7 sty ZPQuickPtr3+1 we have matching token (or 1st one in split mode) at [ZPQuickPtr3,ZPQuickPtr3+1] - tya compute token len=Y-ZPQuickPtr3+1 +.7 sty S.PStrGetTkn.END we have matching token (or 1st one in split mode) at [START,END] + tya compute token len=Y-END sec - sbc ZPQuickPtr3 + sbc S.PStrGetTkn.START inc +1 inc +1 for string len tay @@ -266,39 +268,39 @@ S.PStrGetTkn >PULLA Get IDX jsr S.GetMem bcs .61 phx save hMem - >STYA ZPQuickPtr4 - lda ZPQuickPtr3+1 + >STYA ZPQuickPtr2 + lda S.PStrGetTkn.END sec - sbc ZPQuickPtr3 + sbc S.PStrGetTkn.START inc - sta (ZPQuickPtr4) set this string length - ldy ZPQuickPtr3 + sta (ZPQuickPtr2) set this string length + ldy S.PStrGetTkn.START dey .8 iny - inc ZPQuickPtr4 + inc ZPQuickPtr2 bne .9 - inc ZPQuickPtr4+1 + inc ZPQuickPtr2+1 .9 lda (ZPQuickPtr1),y - sta (ZPQuickPtr4) - cpy ZPQuickPtr3+1 + sta (ZPQuickPtr2) + cpy S.PStrGetTkn.END bne .8 - lda ZPQuickPtr2+1 requested token=0 ? + lda S.PStrGetTkn.IDX requested token=0 ? bne .87 tya yes, we are in "split mode" cmp (ZPQuickPtr1) Remaining chars ? beq .87 .10 iny move to next char lda (ZPQuickPtr1),y - cmp ZPQuickPtr2 char=SEP? + cmp S.PStrGetTkn.SEP char=SEP? bne .11 tya cmp (ZPQuickPtr1) last one ? bne .10 bra .87 yes, nothing to return -.11 sty ZPQuickPtr3+1 ZPQuickPtr3+1=1st non SEP char - lda (ZPQuickPtr1) compute reamining len=Y-ZPQuickPtr3+1 +.11 sty S.PStrGetTkn.END S.PStrGetTkn.END=1st non SEP char + lda (ZPQuickPtr1) compute reamining len=Y-ZPQuickPtr1+1 sec - sbc ZPQuickPtr3+1 + sbc S.PStrGetTkn.END inc inc +1 for string len tay @@ -308,20 +310,20 @@ S.PStrGetTkn >PULLA Get IDX jsr S.GetMem bcs .98 phx save hMem - >STYA ZPQuickPtr4 + >STYA ZPQuickPtr2 lda (ZPQuickPtr1) sec - sbc ZPQuickPtr3+1 + sbcS.PStrGetTkn.END inc - sta (ZPQuickPtr4) - ldy ZPQuickPtr3+1 + sta (ZPQuickPtr2) + ldy S.PStrGetTkn.END dey .12 iny - inc ZPQuickPtr4 + inc ZPQuickPtr2 bne .13 - inc ZPQuickPtr4+1 + inc ZPQuickPtr2+1 .13 lda (ZPQuickPtr1),y - sta (ZPQuickPtr4) + sta (ZPQuickPtr2) tya cmp (ZPQuickPtr1) bne .12 @@ -329,15 +331,22 @@ S.PStrGetTkn >PULLA Get IDX pla get back token hMem clc rts + .87 ldx #0 Splitmode but no remaining string to return pla get back token hMem clc rts + .98 pla get back Token hMem jsr S.FreeMemA discard Token .99 sec rts *-------------------------------------- +S.PStrGetTkn.SEP .BS 1 +S.PStrGetTkn.IDX .BS 1 +S.PStrGetTkn.START .BS 1 +S.PStrGetTkn.END .BS 1 +*-------------------------------------- S.GetArgCount clc rts diff --git a/SYS/KERNEL.S.TSK.txt b/SYS/KERNEL.S.TSK.txt index bdf7a98f..034b58c4 100644 --- a/SYS/KERNEL.S.TSK.txt +++ b/SYS/KERNEL.S.TSK.txt @@ -5,87 +5,6 @@ INC 1 AUTO 6 .LIST OFF *-------------------------------------- -* S.TskMgrInit -*-------------------------------------- -S.TskMgrInit stz TSKMGR.LASTID - lda #1 - sta TSKMGR.SIZE One Slot Busy (Kernel PS=0) - - >LDYAI TskMgr.Table Clear whole process table - >STYA ZPQuickPtr1 - - ldx #K.PS.MAX - -.1 lda #0 - ldy #S.PS.SIZE-1 - -.2 sta (ZPQuickPtr1),y - dey - bpl .2 - - lda ZPQuickPtr1 - clc - adc #S.PS.SIZE - sta ZPQuickPtr1 - bcc .3 - - inc ZPQuickPtr1+1 -.3 dex - bne .1 - - lda #1 - ldy #S.PS.hINDEV - sta TskMgr.Table,y Make In DEV = SYS - ldy #S.PS.hOUTDEV - sta TskMgr.Table,y Make OUT DEV = SYS - ldy #S.PS.hERRDEV - sta TskMgr.Table,y Make ERR DEV = SYS - - jsr S.CreateEnv - bcs * - - ldy #S.PS.hENV - sta TskMgr.Table,y - - >LDYAI TmpBuffer256 - jsr S.MLIGetPrefixYA - bcs * - - >LDYAI TmpBuffer256 - jsr S.NewPStrYA - bcs * - - ldy #S.PS.hPREFIX - sta TskMgr.Table,y -S.TskMgrInit.Env - - jsr S.SelectProcess0 - - ldx #DEVMGR.OPEN - jsr pDevJmp - - >PUSHWI TmpBuffer256 push ENV value - >PUSHWI ENV.A2osX push ENV name - jsr S.SetEnvVarP - bcs .9 - - >PUSHWI ENV.PATH.VALUE - >PUSHWI ENV.PATH - jsr S.SetEnvVarP - bcs .9 - - >PUSHWI ENV.LIB.VALUE - >PUSHWI ENV.LIB - jsr S.SetEnvVarP - bcs .9 - - >PUSHWI ENV.DRV.VALUE - >PUSHWI ENV.DRV - jsr S.SetEnvVarP - bcs .9 - -.9 rts -*-------------------------------------- * S.TskMgrRun *-------------------------------------- S.TskMgrRun >LDYAI TskMgr.Table+S.PS.SIZE diff --git a/SYS/KERNEL.S.txt b/SYS/KERNEL.S.txt index 177d3eed..32068cd4 100644 --- a/SYS/KERNEL.S.txt +++ b/SYS/KERNEL.S.txt @@ -5,7 +5,7 @@ INC 1 AUTO 6 .LIST OFF .OP 65C02 - .OR $D000 + .OR $2000 .TF /A2OSX.BOOT/SYS/KERNEL *-------------------------------------- .INB INC/MACROS.I @@ -13,183 +13,99 @@ AUTO 6 .INB INC/IO.I .INB INC/PRODOS.I *-------------------------------------- +TmpPtr1 .EQ $0 for X.PRINTF.S ZPQuickPtr1 .EQ ZPKERNEL Temp Ptrs for use in very limited scope ZPQuickPtr2 .EQ ZPKERNEL+2 (could be trashed by any JSR) ZPQuickPtr3 .EQ ZPKERNEL+4 ZPQuickPtr4 .EQ ZPKERNEL+6 *-------------------------------------- -* $D000-D0FF KERNEL.SYSCALL Jmp Table +* Kernel Stage 2 *-------------------------------------- - .DA S.GetMem $00 - .DA S.FreeMemA - .DA S.GetMemPtrA - .DA S.GetMemByIDA - - .DA S.GetMemByNameA - .DA S.GetMemByNameYA - .DA 0 - .DA 0 -*-------------------------------------- - .DA S.NewPStrYA $10 - .DA S.PStrCpyA - .DA S.PStrCat - .DA S.PStrCmp +Kernel.Init2 >LDAXI MSG.Init2 + jsr PrintCStrAX - .DA S.PStrGetTkn - .DA 0 - .DA S.GetArgCount - .DA S.GetArgA -*-------------------------------------- - .DA S.LoadBinA $20 - .DA S.LoadLibYA - .DA S.UnloadLibA - .DA S.LoadDrvA - - .DA 0 - .DA 0 - .DA 0 - .DA 0 -*-------------------------------------- - .DA S.ExpandPStrA $30 - .DA S.ExpandPStrYA - .DA S.GetEnvVarA - .DA S.GetEnvVarYA - - .DA S.SetEnvVarH - .DA S.SetEnvVarP - .DA S.DelEnvVarA - .DA S.DelEnvVarYA -*-------------------------------------- - .DA S.MLICreateFile $40 - .DA S.MLICreateDirA - .DA S.MLICreateDirYA - .DA S.MLIDestroyA - - .DA S.MLIDestroyYA - .DA S.MLIRename - .DA S.MLISetFileInfo - .DA S.MLIGetFileInfoA - - .DA S.MLIGetFileInfoYA $50 - .DA S.MLIOnline - .DA S.MLISetPrefixA - .DA S.MLISetPrefixYA - - .DA S.MLIGetPrefixA - .DA S.MLIGetPrefixYA - .DA S.MLIOpenA - .DA S.MLIOpenYA - - .DA S.MLINewLine $60 - .DA S.MLIRead - .DA S.MLIWrite - .DA S.MLICloseA - - .DA S.MLIFlushA - .DA S.MLISetMark - .DA S.MLIGetMarkA - .DA S.MLISetEOF - - .DA S.MLIGetEOFA $70 - .DA S.MLISetBuf - .DA S.MLIGetBuf - .DA S.MLIGetTime - - .DA S.MLIAllocIRQ - .DA S.MLIDeallocIRQA - .DA S.MLIReadBlock - .DA S.MLIWriteBlock -*-------------------------------------- - .DA S.GetDevByIDA $80 - .DA S.GetDevByNameA - .DA S.GetDevByNameYA - .DA S.GetDevInfoA - - .DA S.GetKeyboardEvent - .DA 0 - .DA 0 - .DA 0 -*-------------------------------------- - .DA S.ExecProcessNewEnvYA $90 - .DA S.ExecProcessYA - .DA S.CreateProcessNewEnvYA - .DA S.CreateProcessYA - - .DA S.GetPSByIDA - .DA 0 - .DA S.Sleep - .DA 0 -*-------------------------------------- - .DA S.CheckPrefixA $A0 - .DA S.FileSearch - .DA S.LoadFileA - .DA S.LoadFileYA - - .DA S.ListDirInitA - .DA S.ListDirInitYA - .DA S.ListDirNextA - .DA S.ListDirCloseA -*-------------------------------------- - .DA 0 $B0 - .DA 0 - .DA 0 - .DA 0 - - .DA 0 - .DA 0 - .DA 0 - .DA 0 -*-------------------------------------- - .DA S.ScreenSelectA $C0 - .DA 0 - .DA 0 - .DA 0 - - .DA 0 - .DA 0 - .DA 0 - .DA 0 -*-------------------------------------- - .DA S.COutA $D0 - .DA S.PSTROutA - .DA S.PSTROutYA - .DA 0 - .DA S.HexOutA - .DA S.HexOutYA - .DA S.DecOutA - .DA S.DecOutYA -*-------------------------------------- - .DA 0 $E0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 -*-------------------------------------- - .DA 0 $F0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 - .DA 0 -*-------------------------------------- -Kernel.Init sei + sei ldx #$FF init 6502 stack to highest txs + sta SETALTZP + stx A2osX.SaveSM stx A2osX.SaveSX + + sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F + lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F cli + + >LDAXI MSG.Relocate + jsr PrintCStrAX + + sei + sta SETALTZP + + >LDYAI A2osX.BE00 + >STYA ZPQuickPtr1 + >LDYAI $BE00 + >STYA ZPQuickPtr2 + >LDYAI A2osX.BE00.SIZE^$FFFF + >STYA ZPQuickPtr3 + + jsr Kernel.Move + lda RRAMWRAMBNK2 + lda RRAMWRAMBNK2 + + >LDYAI A2osX.D002 + >STYA ZPQuickPtr1 + >LDYAI $D000 + >STYA ZPQuickPtr2 + >LDYAI A2osX.D002.SIZE^$FFFF + >STYA ZPQuickPtr3 + + jsr Kernel.Move + + lda RRAMWRAMBNK1 + lda RRAMWRAMBNK1 + + >LDYAI A2osX.D001 + >STYA ZPQuickPtr1 + >LDYAI $D000 + >STYA ZPQuickPtr2 + >LDYAI A2osX.D001.SIZE^$FFFF + >STYA ZPQuickPtr3 + + jsr Kernel.Move + + >LDYAI A2osX.E000 + >STYA ZPQuickPtr1 + >LDYAI $E000 + >STYA ZPQuickPtr2 + >LDYAI A2osX.E000.SIZE^$FFFF + >STYA ZPQuickPtr3 + + jsr Kernel.Move >LDYAI D.STACK.TOP >STYA pStack init Soft Stack - stz A2osX.SCREENS - stz A2osX.ASCREEN + sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F + lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F + cli + + lda #6 + sta A2osX.HZ + pha push HZ + >LDAXI MSG.HZ + jsr PrintCStrAX + + jsr CPU.Init + + >LDAXI MSG.K.INIT + jsr PrintCStrAX + + sta SETALTZP + lda RRAMWRAMBNK1 + lda RRAMWRAMBNK1 + jsr S.IrqMgrInit bcs * jsr S.MemMgrInit @@ -201,196 +117,149 @@ Kernel.Init sei jsr S.TskMgrInit bcs * - >LDYAI MSG.Init - jsr S.PSTROutYA + sta CLRALTZP Make MAIN ZP is enabled for X.PRINT.F + lda RROMBNK1 Make sure ROM is enabled for X.PRINT.F + + >LDAXI MSG.Init2.OK + jsr PrintCStrAX - >LDYAI MSG.Init.Startup - jsr S.PSTROutYA + sta SETALTZP + lda RRAMWRAMBNK1 + lda RRAMWRAMBNK1 + + >DEBUGOA +*-------------------------------------- +* Kernel Stage 3 +*-------------------------------------- +Kernel.Init3 ldx #DEVMGR.SELECT + jsr pDevJmp + + >LDYAI MSG.Init3 + >SYSCALL SYS.PSTROutYA + + >LDYAI MSG.StartupFile + >SYSCALL SYS.PSTROutYA >LDYAI STARTUP.ARGS Get A2osX.STARTUP full path... - jsr S.NewPStrYA + >SYSCALL SYS.NewPStrYA pha >LDYAI STARTUP.CMD Get SHELL full path... - jsr S.NewPStrYA + >SYSCALL SYS.NewPStrYA ply get back ARGS in Y phy pha A=CMD, save for discard - jsr S.CreateProcessYA - bcs * + >SYSCALL SYS.CreateProcessYA + bcc .1 + >PUSHA + >LDYAI MSG.StartupErr + >SYSCALL SYS.PSTROutYA + bra * + +.1 pla + >SYSCALL SYS.FreeMemA pla - jsr S.FreeMemA - pla - jsr S.FreeMemA + >SYSCALL SYS.FreeMemA - >LDYAI MSG.Init.OK - jsr S.PSTROutYA -*-------------------------------------- -S.KernelRun jsr S.TskMgrRun - bcc S.KernelRun.EVT - lda #A2osX.SCREENS.S - jsr S.ScreenSelectA - >LDYAI MSG.KRNLPANIC - jsr S.PSTROutYA - bra * + >LDYAI MSG.Init3.OK + >SYSCALL SYS.PSTROutYA -S.KernelRun.EVT - jsr S.GetEvents - bcs S.KernelRun CS=no event - - jsr S.DispatchEvents - bcc S.KernelRun CC=All Events Dispatched - - jsr S.SelectProcess0 - - stz pEvent + >LDYAI TskMgr.Table + >STYA pPs -.1 lda (pEvent) - beq .81 - bmi .8 Discard any timer eventa - - bit #S.EVT.F.KEY any special key? - beq .7 - - ldy #S.EVT.DATAHI Open-Apple? - lda (pEvent),y - bpl .7 - - ldy #S.EVT.DATALO - lda (pEvent),y - - cmp #$31 - bne .2 - lda #A2osX.SCREENS.S - jsr S.ScreenSelectA - bra .8 - -.2 cmp #$32 - bne .3 - lda #A2osX.SCREENS.C - jsr S.ScreenSelectA - bra .8 - -.3 cmp #$33 - bne .7 - lda #A2osX.SCREENS.G - jsr S.ScreenSelectA - bra .8 - -.7 jsr S.DumpEvent - -.8 jsr S.DestroyEvent - -.81 lda pEvent - clc - adc #S.EVT - sta pEvent - lda EVTMGR.COUNT - bne .1 jmp S.KernelRun *-------------------------------------- -S.DumpEvent ldy #S.EVT.DATAW2+1 - >PUSHB (pEvent),y - dey - >PUSHB (pEvent),y - - ldy #S.EVT.DATAW1+1 - >PUSHB (pEvent),y - dey - >PUSHB (pEvent),y - - ldy #S.EVT.DATAHI - >PUSHB (pEvent),y - ldy #S.EVT.DATALO - >PUSHB (pEvent),y - - ldy #S.EVT.hDEV - >PUSHB (pEvent),y - - >PUSHB (pEvent) - >LDYAI MSG.DumpEvent - jmp S.PSTROutYA -*-------------------------------------- -* S.ScreenSelectA -* IN : -* A = Screen to display -*-------------------------------------- -S.ScreenSelectA and A2osX.SCREENS Screen is available ? - beq .9 ...not setup up - - cmp #A2osX.SCREENS.S - bne .1 - sta SETTEXT - sta SETALTCHAR - sta SET80DISP - sta CLR80STORE - sta SETPAGE2 - bra .8 - -.1 cmp #A2osX.SCREENS.C +Kernel.Move ldy #0 +.1 inc ZPQuickPtr3 bne .2 - sta SETTEXT - sta SETALTCHAR - sta SET80DISP - sta CLR80STORE - sta CLRPAGE2 - bra .8 + inc ZPQuickPtr3+1 + beq .9 + +.2 lda (ZPQuickPtr1),y + sta (ZPQuickPtr2),y + iny + bne .1 -.2 cmp #A2osX.SCREENS.G - bne .9 - - sta CLRTEXT - sta CLRMIXED - sta SETHIRES - sta CLR80STORE - sta CLRPAGE2 - sta SETIOUDIS - sta SETDHIRES - -* sta CLR80DISP -* sta SETDHIRES -* sta CLRDHIRES -* sta SET80DISP -* sta SETDHIRES -* sta CLRDHIRES -* sta SETDHIRES - -.8 sta A2osX.ASCREEN -.9 rts + inc ZPQuickPtr1+1 + inc ZPQuickPtr2+1 + bne .1 +.9 rts *-------------------------------------- -MSG.Init >PSTRING "A2osX[Stage2]:Init\n" -MSG.Init.Startup >PSTRING "EXEC A2osX.Startup...\n" -MSG.Init.OK >PSTRING "A2osX[Stage2]:Complete.\n" -MSG.DumpEvent >PSTRING "!Unhandled Event:Flags=%h,DevID=%h,DATALO=%h,DATAHI=%h,W1=%H,W2=%H\n" -MSG.KRNLPANIC >PSTRING "\n!!!Kernel Panic!!!\n" + .INB X.PRINTF.S + .INB SYS/KERNEL.S.CPU + .INB SYS/KERNEL.S.INIT +*-------------------------------------- +MSG.Init2 >CSTRING "A2osX[Stage2]:Init\n" +MSG.Relocate >CSTRING "Relocating KERNEL...\n" +MSG.HZ >CSTRING "Kernel SYS Timer Set For %d0 hz Machine.\n" +MSG.K.INIT >CSTRING "Kernel Setup...\n" +MSG.Init2.OK >CSTRING "A2osX[Stage2]:Complete.\n" +*-------------------------------------- +MSG.Init3 >PSTRING "A2osX[Stage3]:Init\n" +MSG.StartupFile >PSTRING "EXEC A2osX.Startup...\n" +MSG.StartupErr >PSTRING "SHELL A2osX.Startup Failed with Error : [$%h]\n" +MSG.Init3.OK >PSTRING "A2osX[Stage3]:Complete.\n" *-------------------------------------- STARTUP.CMD >PSTRING "${A2OSX}SBIN/SHELL" STARTUP.ARGS >PSTRING "${A2OSX}A2osX.STARTUP" *-------------------------------------- -ENV.A2osX >PSTRING "A2OSX" -ENV.PATH >PSTRING "PATH" -ENV.PATH.VALUE >PSTRING "${A2OSX}SBIN/;${A2OSX}BIN/" -ENV.LIB >PSTRING "LIB" -ENV.LIB.VALUE >PSTRING "${A2OSX}LIB/" -ENV.DRV >PSTRING "DRV" -ENV.DRV.VALUE >PSTRING "${A2OSX}DRV/" +* Global Page *-------------------------------------- - .INB SYS/KERNEL.S.IRQ - .INB SYS/KERNEL.S.MEM +A2osX.BE00 .EQ * + .PH $BE00 + .INB SYS/KERNEL.S.GP + .EP +A2osX.BE00.END .EQ * +*-------------------------------------- +* LC AUX $D000 BANK1 +*-------------------------------------- +A2osX.D001 .EQ * + .PH $D000 .INB SYS/KERNEL.S.STR .INB SYS/KERNEL.S.CIO .INB SYS/KERNEL.S.FIO .INB SYS/KERNEL.S.MLI + .INB SYS/KERNEL.S.ENV + .EP +A2osX.D001.END .EQ * +*-------------------------------------- +* LC AUX $D000 BANK2 +*-------------------------------------- +A2osX.D002 .EQ * + .PH $D000 + cld + .EP +A2osX.D002.END .EQ * +*-------------------------------------- +* LC AUX $E000 +*-------------------------------------- +A2osX.E000 .EQ * + .PH $E000 + .INB SYS/KERNEL.S.JMP + .INB SYS/KERNEL.S.RUN + .INB SYS/KERNEL.S.IRQ + .INB SYS/KERNEL.S.MEM .INB SYS/KERNEL.S.BIN .INB SYS/KERNEL.S.DRV .INB SYS/KERNEL.S.LIB - .INB SYS/KERNEL.S.ENV .INB SYS/KERNEL.S.TSK .INB SYS/KERNEL.S.EVT *-------------------------------------- - .INB SYS/KERNEL.S.DEV +* Make sure KERNEL.S.DEV is the last one *-------------------------------------- + .INB SYS/KERNEL.S.DEV + .EP +A2osX.E000.END .EQ * +*-------------------------------------- + .LIST ON +*-------------------------------------- +A2osX.BE00.SIZE .EQ A2osX.BE00.END-A2osX.BE00 +A2osX.D001.SIZE .EQ A2osX.D001.END-A2osX.D001 +A2osX.D002.SIZE .EQ A2osX.D002.END-A2osX.D002 +A2osX.E000.SIZE .EQ A2osX.E000.END-A2osX.E000 +*-------------------------------------- + .LIST OFF MAN SAVE SYS/KERNEL.S ASM diff --git a/X.PRINTF.S.txt b/X.PRINTF.S.txt new file mode 100644 index 00000000..fb2c70e7 --- /dev/null +++ b/X.PRINTF.S.txt @@ -0,0 +1,177 @@ +PR#3 +PREFIX /A2OSX.SRC +NEW +INC 1 +AUTO 6 + .LIST OFF +*-------------------------------------- +PrintPStrAX >STAX TmpPtr1 + lda (TmpPtr1) + tax + beq .9 + ldy #1 + +.1 lda (TmpPtr1),y + ora #$80 + jsr $FDED COUT + iny + dex + bne .1 + +.9 rts +*-------------------------------------- +PrintCStrAX >STAX TmpPtr1 + pla + sta X.Save.RTS + pla + sta X.Save.RTS+1 + + ldy #0 + +.1 stz X.b0Flag + stz X.DigitCount + + lda (TmpPtr1),y + beq .9 + cmp #'%' + bne .4 + +.11 iny + lda (TmpPtr1),y + beq .9 + cmp #'0' + bne .22 + ror X.b0Flag beq -> CS + bra .11 + +.22 bcc .21 + cmp #'9'+1 + bcs .21 + and #$0f + sta X.DigitCount + bra .11 + +.21 cmp #'d' + bne .2 + pla + jsr PrintADec + bra .8 + +.2 cmp #'D' + bne .3 + pla + plx + jsr PrintAXDec + bra .8 + +.3 cmp #'h' + bne .4 + pla + jsr $FDDA PRBYTE + +.4 cmp #'\' + bne .7 + iny + lda (TmpPtr1),y + beq .9 + cmp #'n' + bne .9 + lda #$0D + +.7 ora #$80 + jsr $FDED COUT +.8 iny + bne .1 + +.9 lda X.Save.RTS+1 + pha + lda X.Save.RTS + pha + rts +*-------------------------------------- +PrintADec ldx #0 +PrintAXDec >STAX X.HexBuffer + stz X.BCDBuffer + stz X.BCDBuffer+1 + stz X.BCDBuffer+2 + + phy + + ldx #16 let's roll 16 bits + sed +.2 asl X.HexBuffer + rol X.HexBuffer+1 + php cpy will disturb carry while BCD adc + ldy #0 +.3 plp + lda X.BCDBuffer,y + adc X.BCDBuffer,y + sta X.BCDBuffer,y + php + iny + cpy #3 Last byte of X.BCDBufferBUF? + bne .3 + plp + dex + bne .2 + + cld + + ldx #0 + ldy #5 + +.4 lda X.BCDBuffer,x + pha + and #$0F + ora #$B0 + sta X.DigitBuffer,y + dey + + pla + lsr + lsr + lsr + lsr + ora #$B0 + sta X.DigitBuffer,y + inx + dey + bpl .4 + + lda X.DigitCount + beq .5 + lda #6 + sec + sbc X.DigitCount +.5 tay +.6 lda X.DigitBuffer,y + cmp #"0" + beq .7 + + sec + ror X.b0Flag + bra .8 + +.7 cpy #5 + beq .8 + lda #" " + bit X.b0Flag + bpl .81 + lda #"0" +.8 jsr $FDED COUT +.81 iny + cpy #6 + bne .6 + +.9 ply + rts +*-------------------------------------- +X.Save.RTS .BS 2 +X.HexBuffer .BS 2 +X.BCDBuffer .BS 3 +X.b0Flag .BS 1 +X.DigitCount .BS 1 +X.DigitBuffer .BS 6 +*-------------------------------------- +MAN +SAVE X.PRINTF.S diff --git a/_MAKEDIR.txt b/_MAKEDIR.txt index 23908067..ea391711 100644 --- a/_MAKEDIR.txt +++ b/_MAKEDIR.txt @@ -2,17 +2,16 @@ PREFIX /A2OSX.BOOT CREATE BIN CREATE DRV CREATE ETC -CREATE INC CREATE LIB CREATE SBIN +CREATE SBIN/GFX CREATE SYS CREATE USR PREFIX /A2OSX.SRC CREATE BIN CREATE DRV -CREATE ETC CREATE INC CREATE LIB CREATE SBIN +CREATE SBIN/GFX CREATE SYS -CREATE USR diff --git a/_MAKESYS.txt b/_MAKESYS.txt index a11e0e53..d42a8256 100644 --- a/_MAKESYS.txt +++ b/_MAKESYS.txt @@ -5,7 +5,7 @@ AUTO 6 PREFIX /A2OSX.BOOT BLOAD A2OSX.SYSTEM DELETE A2OSX.SYSTEM -BSAVE A2OSX.SYSTEM,TSYS,A$2000,L4864 +BSAVE A2OSX.SYSTEM,TSYS,A$2000,L$1000 -A2OSX.SYSTEM MAN PREFIX /A2OSX.SRC