mirror of
https://github.com/A2osX/A2osX.git
synced 2024-11-25 20:33:13 +00:00
Kernel version 0.8 (In Progress)
This commit is contained in:
parent
92c1b3cb49
commit
399646b8aa
62
BIN/LS.S.txt
62
BIN/LS.S.txt
@ -49,67 +49,42 @@ CS.INIT >LDYA L.LIBSTR
|
||||
>SYSCALL SYS.LoadLibYA
|
||||
sta hLIBSTR
|
||||
|
||||
stz TmpBuffer256
|
||||
|
||||
>SYSCALL SYS.GetArgC
|
||||
cmp #1
|
||||
bne .1
|
||||
|
||||
jsr CS.INIT.GETPFX no arg, go get current prefix
|
||||
bra .3
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.NewPStrYA no arg, go get current prefix
|
||||
stx hFullPath
|
||||
bra .2
|
||||
|
||||
.1 lda #1
|
||||
>SYSCALL SYS.GetArgA
|
||||
>STYA ZPPtr1
|
||||
|
||||
ldy #1
|
||||
lda (ZPPtr1),y
|
||||
cmp #'/' full path starting with '/'?
|
||||
beq .2 yes, do not append to current prefix
|
||||
>SYSCALL SYS.GetFullPathYA
|
||||
stx hFullPath
|
||||
|
||||
jsr CS.INIT.GETPFX
|
||||
|
||||
.2 >PUSHW ZPPtr1
|
||||
>PUSHWI TmpBuffer256
|
||||
>SYSCALL SYS.PStrCat
|
||||
|
||||
.3 >LDYAI TmpBuffer256
|
||||
>SYSCALL SYS.CheckPrefixYA is it a existing directory?
|
||||
bcs .5 no, let ListDirInitYA extract pattern
|
||||
|
||||
lda TmpBuffer256
|
||||
tay
|
||||
lda #'/'
|
||||
cmp TmpBuffer256,y
|
||||
beq .4
|
||||
iny
|
||||
sta TmpBuffer256,y
|
||||
|
||||
.4 iny
|
||||
lda #'*'
|
||||
sta TmpBuffer256,y
|
||||
|
||||
.5 >LDYAI TmpBuffer256
|
||||
>SYSCALL SYS.ListDirInitYA
|
||||
bcs .9
|
||||
.2 >SYSCALL SYS.ListDirInitYA
|
||||
bcs .99
|
||||
ldy #hS.LISTDIR
|
||||
sta (pData),y
|
||||
|
||||
jsr .99
|
||||
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPs)
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.INIT.GETPFX ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>PUSHYA
|
||||
>PUSHWI TmpBuffer256
|
||||
>SYSCALL SYS.PStrCpy
|
||||
.99 pha
|
||||
lda hFullPath
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN ldy #bCANCEL
|
||||
@ -414,6 +389,7 @@ TFF >PSTRING "SYS"
|
||||
PRODOS.FT.DFLT >PSTRING "$ "
|
||||
HEXDIGIT .AS '0123456789ABCDEF'
|
||||
hLIBSTR .BS 1
|
||||
hFullPath .BS 1
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
|
47
BIN/MD.S.txt
47
BIN/MD.S.txt
@ -34,53 +34,28 @@ CS.START cld
|
||||
.DA CS.QUIT
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT stz hFullPath
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
beq .9
|
||||
CS.INIT >SYSCALL SYS.GetArgC
|
||||
cmp #1
|
||||
bne .99
|
||||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPTR1
|
||||
lda (ZPPTR1)
|
||||
beq .9
|
||||
|
||||
ldy #1
|
||||
lda (ZPPTR1),y
|
||||
cmp #'/'
|
||||
bne .1
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
bra .2
|
||||
|
||||
.1 ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>SYSCALL SYS.PStrCat
|
||||
sta hFullPath
|
||||
|
||||
.2 >SYSCALL SYS.GetMemPtrA
|
||||
lda #1
|
||||
>SYSCALL SYS.GetArgA
|
||||
>SYSCALL SYS.GetFullPathYA
|
||||
stx hFullPath
|
||||
>SYSCALL SYS.MLICreateDirYA
|
||||
php
|
||||
pha
|
||||
pha save error code
|
||||
jsr .98
|
||||
pla
|
||||
plp
|
||||
sec
|
||||
rts
|
||||
|
||||
.98 lda hFullPath
|
||||
beq .9
|
||||
>SYSCALL SYS.FreeMemA
|
||||
.9 lda #SYSMGR.ERRSYN
|
||||
.99 lda #SYSMGR.ERRSYN
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN
|
||||
CS.DOEVENT sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
49
BIN/RM.S.txt
49
BIN/RM.S.txt
@ -38,49 +38,39 @@ L.MSG.ERR .DA MSG.ERR
|
||||
L.FullPath .DA FullPath
|
||||
.DA 0
|
||||
*--------------------------------------
|
||||
CS.INIT ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
beq .98
|
||||
CS.INIT >SYSCALL SYS.GetArgC
|
||||
cmp #1
|
||||
bne .99
|
||||
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
>STYA ZPPtr1
|
||||
lda (ZPPtr1)
|
||||
beq .98
|
||||
ldy #1
|
||||
lda (ZPPtr1),y
|
||||
cmp #'/'
|
||||
bne .10
|
||||
lda #1
|
||||
>SYSCALL SYS.GetArgA
|
||||
>SYSCALL SYS.GetFullPathYA
|
||||
stx hFullPath
|
||||
|
||||
ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
bra .3
|
||||
|
||||
.10 ldy #S.PS.hARGS
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>PUSHA
|
||||
>SYSCALL SYS.PStrCat
|
||||
ldy #hDirPath
|
||||
sta (pData),y
|
||||
|
||||
.3 >SYSCALL SYS.GetMemPtrA
|
||||
>SYSCALL SYS.ListDirInitYA
|
||||
bcs .99
|
||||
bcs .98
|
||||
ldy #hS.LISTDIR
|
||||
sta (pData),y
|
||||
|
||||
jsr .98
|
||||
|
||||
lda (pPs)
|
||||
ora #S.PS.F.EVENT Now accept events
|
||||
sta (pPs)
|
||||
clc
|
||||
rts
|
||||
|
||||
.98 >LDYA L.MSG.USAGE
|
||||
.98 pha
|
||||
lda hFullPath
|
||||
>SYSCALL SYS.FreeMemA
|
||||
pla
|
||||
sec
|
||||
rts
|
||||
|
||||
.99 >LDYA L.MSG.USAGE
|
||||
>SYSCALL SYS.PSTRoutYA
|
||||
lda #SYSMGR.ERRSYN
|
||||
.99 sec
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN ldy #bCANCEL
|
||||
@ -222,6 +212,7 @@ CS.END
|
||||
MSG.USAGE >PSTRING "Usage : RM [file/Dir, *,? wildcards allowed]\n"
|
||||
MSG.OK >PSTRING " [Ok]\n"
|
||||
MSG.ERR >PSTRING " [%h]\n"
|
||||
hFullPath .BS 1
|
||||
FullPath .BS 64
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
|
@ -1,200 +0,0 @@
|
||||
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
|
@ -13,7 +13,8 @@ AUTO 6
|
||||
* CS : A = EC
|
||||
*--------------------------------------
|
||||
S.OPENDIRYA jsr S.PFTCHECKPATHYA
|
||||
* if
|
||||
* if we are here, we only have to deal with Local ProDOS path
|
||||
|
||||
|
||||
clc
|
||||
rts
|
||||
|
@ -5,6 +5,28 @@ INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
S.ExpandPStrYA >STYA ZPQuickPtr3
|
||||
|
||||
lda (ZPQuickPtr3)
|
||||
sta KrnBuffer256
|
||||
tay
|
||||
|
||||
.1 lda (ZPQuickPtr3),y
|
||||
sta KrnBuffer256,y
|
||||
dey
|
||||
bne .1
|
||||
|
||||
ldy #0
|
||||
|
||||
.2 stz S.ExpandPStr.Start
|
||||
|
||||
.3 tya
|
||||
cmp KrnBuffer256 End of PSTR?
|
||||
beq .80
|
||||
|
||||
iny
|
||||
lda KrnBuffer256,y
|
||||
*--------------------------------------
|
||||
* S.ExpandPStrYA
|
||||
* In:
|
||||
* Y,A = PTR to String to Expand (PSTRING)
|
||||
@ -12,7 +34,8 @@ AUTO 6
|
||||
* X = hMem to Expanded String (PSTRING)
|
||||
* Y,A = PTR to Expanded String
|
||||
*--------------------------------------
|
||||
S.ExpandPStrYA >STYA ZPQuickPtr3
|
||||
S.ExpandPStrYA.OLD
|
||||
>STYA ZPQuickPtr3
|
||||
|
||||
stz KrnBuffer256 init Expanded String len=0
|
||||
|
||||
|
@ -7,12 +7,19 @@ AUTO 6
|
||||
*--------------------------------------
|
||||
* For All SYS.xxxx calls, X = #SYSCall
|
||||
* Must be kept in X before calling
|
||||
* S.PFTCheckPathXX
|
||||
* S.PFTCheckXYZ
|
||||
*--------------------------------------
|
||||
* S.FOPEN
|
||||
* In :
|
||||
* PULLW = PATH (PSTR)
|
||||
* PULLB = MODE
|
||||
* SYS.FOPEN.R .EQ $01 //Ignored (No ProDOS equivalent)
|
||||
* SYS.FOPEN.W .EQ $02 //Ignored (No ProDOS equivalent)
|
||||
* SYS.FOPEN.A .EQ $04 Append
|
||||
* SYS.FOPEN.T .EQ $08 Open/Append in Text mode
|
||||
* SYS.FOPEN.X .EQ $80 Create if not exists
|
||||
* PULLB = TYPE
|
||||
* PULLW = AUXTYPE
|
||||
* Out :
|
||||
* CC : A = hFILE
|
||||
* CS : A = EC
|
||||
@ -20,11 +27,32 @@ AUTO 6
|
||||
S.FOPEN jsr S.PFTCHECKPATHSTK
|
||||
>PULLW MLICALL.PARAMS+1
|
||||
>PULLB S.FOPEN.MODE
|
||||
>PULLB S.FOPEN.TYPE
|
||||
>PULLW S.FOPEN.AUXTYPE
|
||||
|
||||
>PUSHWI S.FILE.PRODOS
|
||||
>MLICALL MLIGETFILEINFO
|
||||
bcc .10 Already Exists
|
||||
|
||||
bit S.FOPEN.MODE Create if not exists ?
|
||||
bpl .9 No, return MLI error
|
||||
|
||||
lda #$C3 Yes, Create...
|
||||
sta MLICALL.PARAMS+3 Access
|
||||
lda S.FOPEN.TYPE
|
||||
sta MLICALL.PARAMS+4 File type
|
||||
>LDYA S.FOPEN.AUXTYPE
|
||||
>STYA MLICALL.PARAMS+5 Aux type
|
||||
lda #$01 Storage=Standard Files
|
||||
sta MLICALL.PARAMS+7
|
||||
>MLICALL MLICREATE
|
||||
bcc .10
|
||||
.9 rts
|
||||
|
||||
.10 >PUSHWI S.FILE.PRODOS
|
||||
>PUSHBI S.MEM.F.INIT0
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
|
||||
>STYA ZPQuickPtr1
|
||||
stx hFILE
|
||||
|
||||
@ -39,24 +67,35 @@ S.FOPEN jsr S.PFTCHECKPATHSTK
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
>MLICALL MLIOPEN
|
||||
bcc .1 Failed...
|
||||
bit S.FOPEN.MODE Create if not exists?
|
||||
bpl .98 no....error
|
||||
bcs .98
|
||||
|
||||
|
||||
.1 lda MLICALL.PARAMS+5 get ref_num
|
||||
lda MLICALL.PARAMS+5 get ref_num
|
||||
ldy #S.FILE.PRODOS.REF
|
||||
sta (ZPQuickPtr1),y
|
||||
|
||||
sta MLICALL.PARAMS+1 Next MLI Calls are REF_NUM based
|
||||
|
||||
lda S.FOPEN.MODE
|
||||
bit #SYS.FOPEN.A
|
||||
beq .1
|
||||
and #SYS.FOPEN.A Append ?
|
||||
beq .20
|
||||
|
||||
>MLICALL MLIGETEOF
|
||||
bcs .98
|
||||
|
||||
>MLICALL MLISETMARK
|
||||
bcs .98
|
||||
|
||||
.20 lda S.FOPEN.MODE
|
||||
and #SYS.FOPEN.T Text Mode ?
|
||||
beq .30
|
||||
|
||||
.1
|
||||
lda hFILE
|
||||
lda #$FF
|
||||
sta MLICALL.PARAMS+2
|
||||
lda #$0D
|
||||
sta MLICALL.PARAMS+3
|
||||
>MLICALL MLINEWLINE
|
||||
|
||||
.30 lda hFILE
|
||||
clc
|
||||
rts CC
|
||||
|
||||
@ -67,6 +106,8 @@ S.FOPEN jsr S.PFTCHECKPATHSTK
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
S.FOPEN.MODE .BS 1
|
||||
S.FOPEN.TYPE .BS 1
|
||||
S.FOPEN.AUXTYPE .BS 2
|
||||
hFILE .BS 1
|
||||
*--------------------------------------
|
||||
* S.FCLOSEA
|
||||
@ -101,7 +142,12 @@ S.FCLOSEA.1 ldy #S.FILE.PRODOS.REF
|
||||
* Y,A = Bytes Read
|
||||
*--------------------------------------
|
||||
S.FREAD jsr S.PFTCHECKFILESTK
|
||||
>PULLB MLICALL.PARAMS+1
|
||||
>PULLA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.FILE.PRODOS.REF
|
||||
lda (ZPQuickPtr1),y
|
||||
sta MLICALL.PARAMS+1
|
||||
>PULLW MLICALL.PARAMS+4
|
||||
>PULLW MLICALL.PARAMS+2
|
||||
>MLICALL MLIREAD
|
||||
@ -118,6 +164,12 @@ S.FREAD jsr S.PFTCHECKFILESTK
|
||||
* Y,A = Bytes Written
|
||||
*--------------------------------------
|
||||
S.FWRITE jsr S.PFTCHECKFILESTK
|
||||
>PULLA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.FILE.PRODOS.REF
|
||||
lda (ZPQuickPtr1),y
|
||||
sta MLICALL.PARAMS+1
|
||||
>PULLB MLICALL.PARAMS+1
|
||||
>PULLW MLICALL.PARAMS+4
|
||||
>PULLW MLICALL.PARAMS+2
|
||||
@ -131,6 +183,10 @@ S.FWRITE jsr S.PFTCHECKFILESTK
|
||||
* A = hFILE
|
||||
*--------------------------------------
|
||||
S.FFLUSHA jsr S.PFTCHECKFILEA
|
||||
jsr S.GetMemPtrA
|
||||
>STYA ZPQuickPtr1
|
||||
ldy #S.FILE.PRODOS.REF
|
||||
lda (ZPQuickPtr1),y
|
||||
sta MLICALL.PARAMS+1
|
||||
>MLICALL MLIFLUSH
|
||||
rts
|
||||
|
@ -204,75 +204,65 @@ S.LoadFile.Len .BS 2
|
||||
* out :
|
||||
* A = hMem of Dir Listing
|
||||
*--------------------------------------
|
||||
S.ListDirInitYA >STYA R.BX Store path
|
||||
S.ListDirInitYA >STYA ZPQuickPtr3 Store path
|
||||
|
||||
stz TmpFileName Reset File.Pattern
|
||||
|
||||
lda (R.BX)
|
||||
lda (ZPQuickPtr3)
|
||||
tay
|
||||
ldx #0
|
||||
|
||||
.1 lda (R.BX),y
|
||||
.1 lda (ZPQuickPtr3),y reverse read path until '/' found
|
||||
cmp #'/'
|
||||
beq .2
|
||||
inx
|
||||
dey
|
||||
bne .1
|
||||
|
||||
.2 stx TmpFileName
|
||||
.2 stx TmpFileName store file pattern len in buffer
|
||||
txa
|
||||
beq .4
|
||||
beq .4 no pattern ?
|
||||
|
||||
lda (R.BX)
|
||||
lda (ZPQuickPtr3)
|
||||
tay
|
||||
|
||||
.3 lda (R.BX),y
|
||||
.3 lda (ZPQuickPtr3),y
|
||||
sta TmpFileName,x
|
||||
dey
|
||||
dex
|
||||
bne .3
|
||||
|
||||
tya
|
||||
sta (R.BX) remove pattern from path
|
||||
sta (ZPQuickPtr3) remove pattern from path
|
||||
|
||||
.4 >PUSHWI S.LISTDIR.SIZE get LISTDIR Struct
|
||||
>PUSHBI S.MEM.F.INIT0 reset all bytes
|
||||
jsr S.GetMem
|
||||
bcs .99
|
||||
stx S.ListDirInitYA.hDir
|
||||
>STYA R.CX Store LISTDIR Struct
|
||||
|
||||
>LDYA R.BX
|
||||
stx S.ListDirInitYA.hDir
|
||||
>STYA ZPQuickPtr4 Store LISTDIR Struct
|
||||
|
||||
>LDYA ZPQuickPtr3
|
||||
jsr S.NewPStrYA
|
||||
bcs .99
|
||||
|
||||
txa
|
||||
ldy #S.LISTDIR.hPATH
|
||||
sta (R.CX),y
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
ldy TmpFileName
|
||||
lda TmpFileName
|
||||
beq .5
|
||||
|
||||
lda #0
|
||||
>PUSHYA
|
||||
>PUSHBI 0
|
||||
jsr S.GetMem
|
||||
bcs .98
|
||||
>STYA ZPQuickPtr1
|
||||
>LDYAI TmpFileName
|
||||
jsr S.NewPStrYA
|
||||
bcs .99
|
||||
|
||||
txa
|
||||
ldy #S.LISTDIR.hPATTERN
|
||||
sta (R.CX),y
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
ldy TmpFileName
|
||||
.40 lda TmpFileName,y
|
||||
sta (ZPQuickPtr1),y
|
||||
dey
|
||||
bpl .40
|
||||
|
||||
.5 lda (R.BX)
|
||||
.5 lda (ZPQuickPtr3)
|
||||
cmp #1 length = 1 ? ('/')
|
||||
bne .6
|
||||
|
||||
jsr S.ListDirInitAV
|
||||
bcs .98
|
||||
lda S.ListDirInitYA.hDir
|
||||
@ -298,34 +288,35 @@ S.ListDirInitAV >PUSHWI 256
|
||||
bcs .99
|
||||
>PUSHYA push buffer for online call
|
||||
txa
|
||||
sta (R.CX) save hONLINE buffer
|
||||
sta (ZPQuickPtr4) save hONLINE buffer
|
||||
>PUSHBI 0 All devices
|
||||
jsr S.MLIOnline
|
||||
bcs .98
|
||||
ldy #S.LISTDIR.ONLINEPTR
|
||||
|
||||
* lda #0 make index point first Entry
|
||||
* sta (R.CX),y
|
||||
* sta (ZPQuickPtr4),y
|
||||
|
||||
clc
|
||||
rts
|
||||
.98 lda (R.CX)
|
||||
|
||||
.98 lda (ZPQuickPtr4)
|
||||
jsr S.FreeMemA
|
||||
.99 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
S.ListDirInitAD
|
||||
* lda #0
|
||||
* sta (R.CX) reset hONLINE
|
||||
* sta (ZPQuickPtr4) reset hONLINE
|
||||
|
||||
>LDYA R.BX Open DIR
|
||||
>LDYA ZPQuickPtr3 Open DIR
|
||||
jsr S.MLIOpenYA
|
||||
bcs .99
|
||||
ldy #S.LISTDIR.REFNUM
|
||||
sta (R.CX),y save ref_num
|
||||
sta (ZPQuickPtr4),y save ref_num
|
||||
txa
|
||||
ldy #S.LISTDIR.hIOBUF
|
||||
sta (R.CX),y save ProDOS IO buffer hMem
|
||||
sta (ZPQuickPtr4),y save ProDOS IO buffer hMem
|
||||
|
||||
>PUSHWI 512 get Read buffer
|
||||
>PUSHBI 0
|
||||
@ -333,7 +324,7 @@ S.ListDirInitAD
|
||||
bcs .99
|
||||
txa
|
||||
ldy #S.LISTDIR.hREADBUF save Read Buffer hMem
|
||||
sta (R.CX),y
|
||||
sta (ZPQuickPtr4),y
|
||||
jsr S.ListDirReadBlock
|
||||
bcs .99
|
||||
>STYA ZPQuickPtr1
|
||||
@ -341,31 +332,31 @@ S.ListDirInitAD
|
||||
ldy #$23 get entry_length
|
||||
lda (ZPQuickPtr1),y
|
||||
ldy #S.LISTDIR.EL
|
||||
sta (R.CX),y
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
ldy #$24 get entry_per_block
|
||||
lda (ZPQuickPtr1),y
|
||||
ldy #S.LISTDIR.EPB
|
||||
sta (R.CX),y
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
ldy #$25 get File_count LO
|
||||
lda (ZPQuickPtr1),y
|
||||
clc
|
||||
adc #1 Add 1 for VOL/DIR Header
|
||||
ldy #S.LISTDIR.FC
|
||||
sta (R.CX),y
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
ldy #$26 get File_count HI
|
||||
lda (ZPQuickPtr1),y
|
||||
adc #0
|
||||
ldy #S.LISTDIR.FC+1
|
||||
sta (R.CX),y
|
||||
sta (ZPQuickPtr4),y
|
||||
|
||||
* ldy #S.LISTDIR.FI
|
||||
* lda #0
|
||||
* sta (R.CX),y
|
||||
* sta (ZPQuickPtr4),y
|
||||
* iny
|
||||
* sta (R.CX),y set FI to $0000
|
||||
* sta (ZPQuickPtr4),y set FI to $0000
|
||||
clc
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
|
@ -1,185 +0,0 @@
|
||||
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 .9
|
||||
|
||||
txa
|
||||
ldy #S.PS.hENV
|
||||
sta (pPs),y
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
>SYSCALL SYS.MLIGetPrefixYA
|
||||
bcs .9
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
bcs .9
|
||||
|
||||
txa
|
||||
ldy #S.PS.hPREFIX
|
||||
sta (pPs),y
|
||||
|
||||
>PUSHWI TmpBuffer256 push ENV value
|
||||
>PUSHWI I.ENV.A2osX push ENV name
|
||||
>SYSCALL SYS.SetEnv
|
||||
bcs .9
|
||||
|
||||
>LDYAI I.ENV.PATH
|
||||
>SYSCALL SYS.PutEnvYA
|
||||
bcs .9
|
||||
|
||||
>LDYAI I.ENV.LIB
|
||||
>SYSCALL SYS.PutEnvYA
|
||||
bcs .9
|
||||
|
||||
>LDYAI I.ENV.DRV
|
||||
>SYSCALL SYS.PutEnvYA
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
I.ENV.A2osX >PSTRING "A2OSX"
|
||||
I.ENV.PATH >PSTRING "PATH=${A2OSX}SBIN/;${A2OSX}BIN/"
|
||||
I.ENV.LIB >PSTRING "LIB=${A2OSX}LIB/"
|
||||
I.ENV.DRV >PSTRING "DRV=${A2OSX}DRV/"
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.INIT
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
509
SYS/KERNEL.S.INIT2.txt
Normal file
509
SYS/KERNEL.S.INIT2.txt
Normal file
@ -0,0 +1,509 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
Kernel.Init2 >LDAXI MSG.Init2
|
||||
jsr PrintCStrAX
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
bcs *
|
||||
jsr S.DevMgrInit
|
||||
bcs *
|
||||
jsr S.EvtMgrInit
|
||||
bcs *
|
||||
jsr S.FltMgrInit
|
||||
bcs *
|
||||
jsr S.TskMgrInit
|
||||
bcs *
|
||||
|
||||
sta CLRALTZP Make sure MAIN ZP...
|
||||
lda RROMBNK1 ... & ROM is enabled for X.PRINT.F
|
||||
|
||||
>LDAXI MSG.Init2.OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
sta SETALTZP
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
rts
|
||||
*--------------------------------------
|
||||
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"
|
||||
*--------------------------------------
|
||||
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"
|
||||
*--------------------------------------
|
||||
Kernel.Move ldy #0
|
||||
.1 inc ZPQuickPtr3
|
||||
bne .2
|
||||
inc ZPQuickPtr3+1
|
||||
beq .9
|
||||
|
||||
.2 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr2),y
|
||||
iny
|
||||
bne .1
|
||||
|
||||
inc ZPQuickPtr1+1
|
||||
inc ZPQuickPtr2+1
|
||||
bne .1
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* 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 .9
|
||||
|
||||
txa
|
||||
ldy #S.PS.hENV
|
||||
sta (pPs),y
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
>SYSCALL SYS.MLIGetPrefixYA
|
||||
bcs .9
|
||||
|
||||
>LDYAI TmpBuffer256
|
||||
>SYSCALL SYS.NewPStrYA
|
||||
bcs .9
|
||||
|
||||
txa
|
||||
ldy #S.PS.hPREFIX
|
||||
sta (pPs),y
|
||||
|
||||
>PUSHWI TmpBuffer256 push ENV value
|
||||
>PUSHWI I.ENV.A2osX push ENV name
|
||||
>SYSCALL SYS.SetEnv
|
||||
bcs .9
|
||||
|
||||
>LDYAI I.ENV.PATH
|
||||
>SYSCALL SYS.PutEnvYA
|
||||
bcs .9
|
||||
|
||||
>LDYAI I.ENV.LIB
|
||||
>SYSCALL SYS.PutEnvYA
|
||||
bcs .9
|
||||
|
||||
>LDYAI I.ENV.DRV
|
||||
>SYSCALL SYS.PutEnvYA
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
S.FltMgrInit stz FltMgr.Table
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
I.ENV.A2osX >PSTRING "A2OSX"
|
||||
I.ENV.PATH >PSTRING "PATH=${A2OSX}SBIN/;${A2OSX}BIN/"
|
||||
I.ENV.LIB >PSTRING "LIB=${A2OSX}LIB/"
|
||||
I.ENV.DRV >PSTRING "DRV=${A2OSX}DRV/"
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.INIT2
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
54
SYS/KERNEL.S.INIT3.txt
Normal file
54
SYS/KERNEL.S.INIT3.txt
Normal file
@ -0,0 +1,54 @@
|
||||
PR#3
|
||||
PREFIX /A2OSX.SRC
|
||||
NEW
|
||||
INC 1
|
||||
AUTO 6
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
Kernel.Init3 ldx #DEVMGR.SELECT
|
||||
jsr pDevJmp
|
||||
|
||||
>LDYAI MSG.Init3
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
|
||||
>PUSHYA
|
||||
>LDYAI MSG.Prefix
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
>PUSHWI STARTUP.CMDLINE
|
||||
>LDYAI MSG.Startup
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
>LDYAI STARTUP.CMDLINE
|
||||
>SYSCALL SYS.CreateProcessYA
|
||||
bcs .9
|
||||
|
||||
>LDYAI MSG.Init3.OK
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
>LDYAI TskMgr.Table
|
||||
>STYA pPs
|
||||
|
||||
jmp S.KernelRun
|
||||
|
||||
.9 >PUSHA
|
||||
>LDYAI MSG.StartupErr
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
bra *
|
||||
*--------------------------------------
|
||||
MSG.Init3 >PSTRING "A2osX[Stage3]:Init\n"
|
||||
MSG.Prefix >PSTRING "Prefix:%S\n"
|
||||
MSG.Startup >PSTRING "Executing Kernel Startup Script...\nCmd:%S\n"
|
||||
MSG.StartupErr >PSTRING "Failed : [$%h]\n"
|
||||
MSG.Init3.OK >PSTRING "A2osX[Stage3]:Complete.\n"
|
||||
*--------------------------------------
|
||||
STARTUP.CMDLINE >PSTRING "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP"
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE SYS/KERNEL.S.INIT3
|
||||
LOAD SYS/KERNEL.S
|
||||
ASM
|
@ -37,7 +37,7 @@ S.PFTCHECKPATHYA
|
||||
dey
|
||||
bne .2
|
||||
|
||||
ldy #S.S.PFT.HANDLER
|
||||
ldy #S.PFT.HANDLER
|
||||
lda (ZPQuickPtr2),y get hLib
|
||||
jsr S.GetMemPtrA
|
||||
>STYA .3+1
|
||||
@ -63,6 +63,7 @@ S.PFTCHECKPATHYA
|
||||
|
||||
.9 >LDYA ZPQuickPtr1 restore passed params
|
||||
ldx S.PFT.SYSCALL
|
||||
>LDYA ZPQuickPtr1
|
||||
rts
|
||||
*--------------------------------------
|
||||
* In :
|
||||
@ -74,7 +75,7 @@ S.PFTCHECKPATHYA
|
||||
S.PFTCHECKFILESTK
|
||||
lda (pStack) read hFILE on top of stack
|
||||
S.PFTCHECKFILEA
|
||||
jsr GetMemPtrA X = unmidified
|
||||
jsr S.GetMemPtrA X = unmidified
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
180
SYS/KERNEL.S.txt
180
SYS/KERNEL.S.txt
@ -21,184 +21,17 @@ ZPQuickPtr4 .EQ ZPKERNEL+6
|
||||
*--------------------------------------
|
||||
* Kernel Stage 2
|
||||
*--------------------------------------
|
||||
Kernel.Init2 >LDAXI MSG.Init2
|
||||
jsr PrintCStrAX
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
bcs *
|
||||
jsr S.DevMgrInit
|
||||
bcs *
|
||||
jsr S.EvtMgrInit
|
||||
bcs *
|
||||
jsr S.TskMgrInit
|
||||
bcs *
|
||||
|
||||
sta CLRALTZP Make sure MAIN ZP...
|
||||
lda RROMBNK1 ... & ROM is enabled for X.PRINT.F
|
||||
|
||||
>LDAXI MSG.Init2.OK
|
||||
jsr PrintCStrAX
|
||||
|
||||
sta SETALTZP
|
||||
lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
|
||||
jsr Kernel.Init2
|
||||
>DEBUGOA
|
||||
*--------------------------------------
|
||||
* Kernel Stage 3
|
||||
*--------------------------------------
|
||||
Kernel.Init3 ldx #DEVMGR.SELECT
|
||||
jsr pDevJmp
|
||||
|
||||
>LDYAI MSG.Init3
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
ldy #S.PS.hPREFIX
|
||||
lda (pPs),y
|
||||
>SYSCALL SYS.GetMemPtrA
|
||||
|
||||
>PUSHYA
|
||||
>LDYAI MSG.Prefix
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
>PUSHWI STARTUP.CMDLINE
|
||||
>LDYAI MSG.Startup
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
>LDYAI STARTUP.CMDLINE
|
||||
>SYSCALL SYS.CreateProcessYA
|
||||
bcs .9
|
||||
|
||||
>LDYAI MSG.Init3.OK
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
|
||||
>LDYAI TskMgr.Table
|
||||
>STYA pPs
|
||||
|
||||
jmp S.KernelRun
|
||||
|
||||
.9 >PUSHA
|
||||
>LDYAI MSG.StartupErr
|
||||
>SYSCALL SYS.PSTROutYA
|
||||
bra *
|
||||
*--------------------------------------
|
||||
Kernel.Move ldy #0
|
||||
.1 inc ZPQuickPtr3
|
||||
bne .2
|
||||
inc ZPQuickPtr3+1
|
||||
beq .9
|
||||
|
||||
.2 lda (ZPQuickPtr1),y
|
||||
sta (ZPQuickPtr2),y
|
||||
iny
|
||||
bne .1
|
||||
|
||||
inc ZPQuickPtr1+1
|
||||
inc ZPQuickPtr2+1
|
||||
bne .1
|
||||
.9 rts
|
||||
jsr Kernel.Init3
|
||||
>DEBUGOA
|
||||
*--------------------------------------
|
||||
.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.Prefix >PSTRING "Prefix:%S\n"
|
||||
MSG.Startup >PSTRING "Executing Kernel Startup Script...\nCmd:%S\n"
|
||||
MSG.StartupErr >PSTRING "Failed : [$%h]\n"
|
||||
MSG.Init3.OK >PSTRING "A2osX[Stage3]:Complete.\n"
|
||||
*--------------------------------------
|
||||
STARTUP.CMDLINE >PSTRING "${A2OSX}SBIN/SHELL ${A2OSX}A2osX.STARTUP"
|
||||
.INB SYS/KERNEL.S.INIT2
|
||||
.INB SYS/KERNEL.S.INIT3
|
||||
*--------------------------------------
|
||||
* Global Page
|
||||
*--------------------------------------
|
||||
@ -243,6 +76,9 @@ A2osX.E000 .EQ *
|
||||
.INB SYS/KERNEL.S.LIB
|
||||
.INB SYS/KERNEL.S.TSK
|
||||
.INB SYS/KERNEL.S.PS
|
||||
*--------------------------------------
|
||||
.INB SYS/KERNEL.S.PFT
|
||||
.INB SYS/KERNEL.S.FIL
|
||||
*--------------------------------------
|
||||
* Make sure KERNEL.S.DEV is the last one
|
||||
*--------------------------------------
|
||||
|
60
_/MidPoint.bas.txt
Normal file
60
_/MidPoint.bas.txt
Normal file
@ -0,0 +1,60 @@
|
||||
PR#3
|
||||
NEW
|
||||
1000 GR
|
||||
1010 COLOR = 12 : X1% = 3 : Y1% = 0 : X2% = 39 : Y2% = 17
|
||||
1020 GOSUB 2000
|
||||
1030 COLOR = 13 : X1% = 2 : Y1% = 1 : X2% = 39 : Y2% = 32
|
||||
1040 GOSUB 2000
|
||||
1050 COLOR = 14 : X1% = 1 : Y1% = 2 : X2% = 29 : Y2% = 39
|
||||
1060 GOSUB 2000
|
||||
1070 COLOR = 15 : X1% = 0 : Y1% = 3 : X2% = 15 : Y2% = 39
|
||||
1080 GOSUB 2000
|
||||
|
||||
1110 COLOR = 8 : X1% = 36 : Y1% = 0 : X2% = 0 : Y2% = 17
|
||||
1120 GOSUB 2000
|
||||
1130 COLOR = 9 : X1% = 37 : Y1% = 1 : X2% = 0 : Y2% = 32
|
||||
1140 GOSUB 2000
|
||||
1150 COLOR = 10 : X1% = 38 : Y1% = 2 : X2% = 26 : Y2% = 39
|
||||
1160 GOSUB 2000
|
||||
1170 COLOR = 11 : X1% = 39 : Y1% = 3 : X2% = 33 : Y2% = 39
|
||||
1180 GOSUB 2000
|
||||
|
||||
1999 END
|
||||
|
||||
2000 VTAB 21 : PRINT "X1=";X1%;" Y1=";Y1%;" X2=";X2%;" Y2=";Y2%
|
||||
|
||||
2010 DX% = X2% - X1%
|
||||
2020 IF DX% = 0 Then VLIN Y1%,Y2% At X1% : RETURN
|
||||
2030 IF DX% < 0 Then T% = X1% : X1% = X2% : X2% = T% : T% = Y1% : Y1% = Y2% : Y2% = T% : DX% = -DX%
|
||||
|
||||
2040 DY% = Y2% - Y1%
|
||||
2050 IF DY% = 0 Then HLIN X1%,X2% At Y1% : RETURN
|
||||
2060 IF DY% < 0 Then IY% = -1 : DY% = - DY% : GOTO 2100
|
||||
2070 IY% = 1
|
||||
|
||||
2100 PLOT X1%,Y1%
|
||||
|
||||
2110 IF DX% > DY% GOTO 3000
|
||||
2120 IF DX% < DY% GOTO 4000
|
||||
|
||||
2200 IF X1% = X2% THEN RETURN
|
||||
2210 X1% = X1% + 1
|
||||
2220 Y1% = Y1% + IY%
|
||||
2230 PLOT X1%,Y1%
|
||||
2240 GOTO 2200
|
||||
|
||||
3000 IE% = 2 * DY% : D% = IE% - DX% : INE% = 2 * (DY% - DX%)
|
||||
3010 IF X1% = X2% THEN RETURN
|
||||
3020 IF D% > 0 THEN D% = D% + INE% : Y1% = Y1% + IY% : GOTO 3040
|
||||
3030 D% = D% + IE%
|
||||
3040 X1% = X1% + 1
|
||||
3050 PLOT X1%,Y1%
|
||||
3060 GOTO 3010
|
||||
|
||||
4000 IE% = 2 * DX% : D% = IE% - DY% : INE% = 2 * (DX% - DY%)
|
||||
4010 IF Y1% = Y2% THEN RETURN
|
||||
4020 IF D% > 0 THEN D% = D% + INE% : X1% = X1% + 1 : GOTO 4040
|
||||
4030 D% = D% + IE%
|
||||
4040 Y1% = Y1% + IY%
|
||||
4050 PLOT X1%,Y1%
|
||||
4060 GOTO 4010
|
Loading…
Reference in New Issue
Block a user