mirror of
https://github.com/Tolik-Trek/2D-Studio.git
synced 2026-06-15 01:21:33 +03:00
571 lines
7.0 KiB
NASM
571 lines
7.0 KiB
NASM
|
|
SDOS:
|
|
PUSH AF
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
PUSH IX
|
|
PUSH IY
|
|
|
|
LD C,3
|
|
CALL INTMOUS
|
|
PUSH DE
|
|
PUSH HL
|
|
|
|
CALL INTOFF
|
|
DI
|
|
LD A,(DOSPAGE)
|
|
OUT (PAGE0),A
|
|
; LD BC,#1FFD
|
|
; LD A,1
|
|
; OUT (C),A
|
|
|
|
POP HL
|
|
POP DE
|
|
LD C,4
|
|
RST #30
|
|
LD C,#83
|
|
RST #30
|
|
|
|
POP IY
|
|
POP IX
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
POP AF
|
|
RET
|
|
|
|
RDOS: DI
|
|
PUSH AF
|
|
PUSH BC
|
|
PUSH DE
|
|
PUSH HL
|
|
PUSH IX
|
|
PUSH IY
|
|
|
|
LD C,2
|
|
RST #30
|
|
LD C,3
|
|
RST #30
|
|
PUSH DE
|
|
PUSH HL
|
|
|
|
LD A,WINPAGE
|
|
OUT (PAGE0),A
|
|
|
|
POP HL
|
|
POP DE
|
|
LD C,4
|
|
CALL INTMOUS
|
|
|
|
LD C,1
|
|
CALL INTMOUS
|
|
|
|
CALL INTON
|
|
; LD BC,#1FFD
|
|
; LD A,0
|
|
; OUT (C),A
|
|
|
|
; POP HL
|
|
; POP DE
|
|
; LD C,4
|
|
; CALL INTMOUS
|
|
|
|
POP IY
|
|
POP IX
|
|
POP HL
|
|
POP DE
|
|
POP BC
|
|
POP AF
|
|
EI
|
|
RET
|
|
|
|
REALN: DB "12345678.123",0
|
|
|
|
MFL: LD HL,DIRITEM
|
|
LD DE,REALN
|
|
LD BC,#0820
|
|
RDF1: LD A,(HL)
|
|
LD (DE),A
|
|
CP C
|
|
JR Z,RDF2
|
|
INC HL
|
|
INC DE
|
|
DJNZ RDF1
|
|
RDF2: LD A,"."
|
|
LD (DE),A
|
|
INC DE
|
|
LD HL,EXTITEM
|
|
LD BC,#0320
|
|
RDF3: LD A,(HL)
|
|
LD (DE),A
|
|
CP C
|
|
JR Z,RDF4
|
|
INC HL
|
|
INC DE
|
|
DJNZ RDF3
|
|
RDF4: XOR A
|
|
LD (DE),A
|
|
RET
|
|
|
|
|
|
SV_FILE: CALL MFL
|
|
CALL SDOS
|
|
IN A,(#E2)
|
|
PUSH AF
|
|
LD HL,REALN
|
|
CALL SAVERAM
|
|
|
|
; LD A,#0D
|
|
; LD C,#F1 ;!!!
|
|
; RST #10
|
|
|
|
EX AF,AF'
|
|
CALL RDOS
|
|
POP AF
|
|
OUT (#E2),A
|
|
EX AF,AF'
|
|
RET
|
|
|
|
SAVERAM:
|
|
XOR A
|
|
LD C,#0A ;CREATE FILE
|
|
RST #10
|
|
RET C
|
|
LD (F_HANDLE),A
|
|
|
|
; LD HL,0
|
|
; LD IX,0
|
|
; LD A,(F_HANDLE)
|
|
; LD BC,#0215 ;MOVE FILE POINTER TO END FILE
|
|
; RST #10
|
|
; LD (SIZE1),HL
|
|
; LD (SIZE0),IX
|
|
; CALL MEM_CLK
|
|
; JR C,CSFIL
|
|
|
|
CALL WRBLK
|
|
;CSFIL
|
|
LD A,(F_HANDLE)
|
|
LD C,#12 ;CLOSE FILE
|
|
RST #10
|
|
RET
|
|
|
|
WRBLK:
|
|
; LD HL,0
|
|
; LD IX,0
|
|
; LD A,(F_HANDLE)
|
|
; LD BC,#0015 ;MOVE FILE POINTER TO START FILE
|
|
; RST #10
|
|
|
|
LD A,#0D ;RAM DISK NUMBER
|
|
LD C,#CE ;GET RAM DISK'S ID
|
|
RST #08
|
|
RET C
|
|
LD B,0
|
|
LD C,#C4 ;GET PHISICAL PAGE NUMBER
|
|
RST #08
|
|
RET C
|
|
|
|
LD DE,(FHSIZE)
|
|
LD HL,(FLSIZE)
|
|
BWAGAIN:
|
|
AND A
|
|
LD BC,#4000
|
|
SBC HL,BC
|
|
EX DE,HL
|
|
LD BC,#0000
|
|
SBC HL,BC
|
|
EX DE,HL
|
|
JR C,ENDBLOKSAVE
|
|
PUSH DE
|
|
PUSH HL
|
|
CALL WR1
|
|
POP HL
|
|
POP DE
|
|
JR NC,BWAGAIN
|
|
RET
|
|
|
|
ENDBLOKSAVE:
|
|
LD BC,#4000
|
|
ADD HL,BC
|
|
EX DE,HL
|
|
PUSH AF
|
|
OUT (PAGE3),A
|
|
;;;;;;;;;;
|
|
LD A,7
|
|
OUT (#FE),A
|
|
;;;;;;;;;;
|
|
LD HL,#C000
|
|
; LD DE,#4000
|
|
LD C,#14 ;WRITE FILE
|
|
LD A,(F_HANDLE)
|
|
RST #10
|
|
POP BC
|
|
RET C
|
|
RET
|
|
|
|
WR1:
|
|
;BWAGAIN
|
|
PUSH AF
|
|
OUT (PAGE3),A
|
|
LD HL,#C000
|
|
LD DE,#4000
|
|
LD C,#14 ;WRITE FILE
|
|
LD A,(F_HANDLE)
|
|
RST #10
|
|
POP BC
|
|
RET C
|
|
CP #FF
|
|
SCF
|
|
RET Z
|
|
LD A,B
|
|
LD C,#C7 ;GET NEXT PAGE
|
|
RST #08
|
|
RET C
|
|
CP #FF
|
|
SCF
|
|
RET Z
|
|
AND A
|
|
RET
|
|
|
|
|
|
RD_FILE: CALL MFL
|
|
CALL SDOS
|
|
IN A,(#E2)
|
|
PUSH AF
|
|
|
|
LD HL,REALN
|
|
CALL READRAM
|
|
|
|
; LD A,#0D
|
|
; LD C,#F0
|
|
; RST #10
|
|
|
|
|
|
EX AF,AF'
|
|
CALL RDOS
|
|
POP AF
|
|
OUT (#E2),A
|
|
EX AF,AF'
|
|
RET
|
|
|
|
F_HANDLE: DB 0
|
|
|
|
SIZE0: DW 0
|
|
SIZE1: DW 0
|
|
|
|
READRAM:
|
|
XOR A
|
|
LD C,#11 ;OPEN FILE
|
|
RST #10
|
|
RET C
|
|
LD (F_HANDLE),A
|
|
|
|
LD HL,0
|
|
LD IX,0
|
|
LD A,(F_HANDLE)
|
|
LD BC,#0215 ;MOVE FILE POINTER TO END FILE
|
|
RST #10
|
|
LD (SIZE1),HL
|
|
LD (SIZE0),IX
|
|
CALL MEM_CLK
|
|
JR C,CLFIL
|
|
|
|
CALL RDBLK
|
|
CLFIL:
|
|
LD A,(F_HANDLE)
|
|
LD C,#12 ;CLOSE FILE
|
|
RST #10
|
|
RET
|
|
|
|
|
|
MEM_CLK: LD HL,(SIZE1)
|
|
LD BC,(SIZE0)
|
|
LD DE,16384
|
|
XOR A
|
|
SCF
|
|
KBT01: RR D
|
|
RR E
|
|
JR C,KBT02
|
|
RR H
|
|
RR L
|
|
RR B
|
|
RR C
|
|
JR NC,KBT01
|
|
LD A,1
|
|
JR KBT01
|
|
KBT02: OR A
|
|
JR Z,KBT03
|
|
INC BC
|
|
KBT03: XOR A
|
|
CP B
|
|
SCF
|
|
RET NZ
|
|
LD B,C ;SIZE IN BLOCKS 16k
|
|
PUSH BC
|
|
LD A,#0D
|
|
LD C,#93
|
|
RST #08
|
|
POP BC
|
|
LD A,#0D
|
|
LD C,#92
|
|
RST #08
|
|
RET
|
|
|
|
RDBLK:
|
|
LD HL,0
|
|
LD IX,0
|
|
LD A,(F_HANDLE)
|
|
LD BC,#0015 ;MOVE FILE POINTER TO START FILE
|
|
RST #10
|
|
|
|
LD A,#0D ;RAM DISK NUMBER
|
|
LD C,#CE ;GET RAM DISK'S ID
|
|
RST #08
|
|
RET C
|
|
LD B,0
|
|
LD C,#C4 ;GET PHISICAL PAGE NUMBER
|
|
RST #08
|
|
RET C
|
|
BLAGAIN: PUSH AF
|
|
OUT (PAGE3),A
|
|
LD HL,#C000
|
|
LD DE,#4000
|
|
LD C,#13 ;READ FILE
|
|
LD A,(F_HANDLE)
|
|
RST #10
|
|
POP BC
|
|
RET C
|
|
CP #FF
|
|
RET Z
|
|
LD A,B
|
|
LD C,#C7 ;GET NEXT PAGE
|
|
RST #08
|
|
RET C
|
|
CP #FF
|
|
JR NZ,BLAGAIN
|
|
RET
|
|
|
|
RD_DIR:
|
|
LD A,(DISK)
|
|
CALL CHDISK
|
|
LD HL,PATH
|
|
CALL CHDIR
|
|
CALL GET_DIR
|
|
RET
|
|
|
|
GET_DIR:
|
|
CALL SDOS
|
|
IN A,(#E2)
|
|
PUSH AF
|
|
LD A,DIRPAGE
|
|
OUT (#E2),A
|
|
LD HL,#C000
|
|
LD DE,#C001
|
|
LD BC,#3FFF
|
|
LD (HL),L
|
|
LDIR
|
|
|
|
CALL READDIR
|
|
|
|
PUSH AF
|
|
CALL RDOS
|
|
|
|
CALL SORT
|
|
LD HL,PLACED
|
|
LD DE,#C000
|
|
LD BC,#2000
|
|
LDIR
|
|
POP AF
|
|
EX AF,AF'
|
|
POP AF
|
|
OUT (#E2),A
|
|
EX AF,AF'
|
|
RET
|
|
|
|
DIRBUF: DS 44
|
|
|
|
PATH0: DB "*.*",0
|
|
|
|
READDIR:
|
|
; LD HL,PATH0
|
|
; LD C,#1E ;CURDIR
|
|
; RST #10
|
|
LD HL,PATH0
|
|
LD DE,DIRBUF
|
|
LD A,#37
|
|
LD BC,#0019 ;F_FIRST
|
|
RST #10
|
|
LD DE,#C000 ;DIR
|
|
JR C,NO_DIR
|
|
F_NEXT_ENTRY:
|
|
LD A,(DIRBUF+32) ;ATTRIBUT
|
|
; BIT 4,A
|
|
; CALL Z,TOLOWER
|
|
LD HL,DIRBUF+33 ;NAME
|
|
LD BC,11
|
|
LDIR
|
|
LD (DE),A
|
|
INC DE
|
|
LD HL,DIRBUF+12 ;OTHER INFORMATION
|
|
LD BC,20
|
|
LDIR
|
|
PUSH DE
|
|
LD DE,DIRBUF
|
|
LD C,#1A ;F_NEXT
|
|
RST #10
|
|
POP DE
|
|
JR NC,F_NEXT_ENTRY
|
|
NO_DIR: EX DE,HL
|
|
LD (HL),0
|
|
RET
|
|
|
|
CHDISK:
|
|
PUSH AF
|
|
CALL SDOS
|
|
POP AF
|
|
LD C,1
|
|
RST #10
|
|
PUSH AF
|
|
CALL RDOS
|
|
POP AF
|
|
RET
|
|
|
|
|
|
CHDIR: CALL SDOS
|
|
LD C,29
|
|
RST #10
|
|
PUSH AF
|
|
CALL RDOS
|
|
POP AF
|
|
RET NC
|
|
LD (#BF00),A
|
|
LD A,7
|
|
OUT (#FE),A
|
|
LD IY,#5C3A
|
|
RET
|
|
|
|
CH_DIR: LD DE,CHPATH
|
|
LD BC,11
|
|
LDIR
|
|
EX DE,HL
|
|
LD B,11
|
|
LD A,#20
|
|
RUN002: DEC HL
|
|
CP (HL)
|
|
JR NZ,RUN003
|
|
DJNZ RUN002
|
|
RUN003: INC HL
|
|
LD (HL),'\' ;
|
|
INC HL
|
|
LD (HL),#00
|
|
LD HL,CHPATH
|
|
CALL CHDIR
|
|
CALL GET_DIR
|
|
RET
|
|
|
|
DISK: DB #02
|
|
|
|
CHPATH: DB "123456781230",0
|
|
|
|
PATH: DB 'C:' ;
|
|
;DB 'C:\' ; ;!FIXIT
|
|
DS 255
|
|
|
|
DIRS: DEFW 0
|
|
POSITER: DEFW 0
|
|
|
|
FILES: DEFW 0
|
|
|
|
SORT: LD IX,#C000
|
|
LD HL,#E020
|
|
LD (ENDSORT),HL
|
|
LD HL,0
|
|
LD (FILES),HL
|
|
SORT_: LD A,(IX+0)
|
|
CP #E5
|
|
JP Z,ADDERA
|
|
OR A
|
|
RET Z
|
|
CP "."
|
|
JP NZ,SORTC
|
|
LD A,(IX+1)
|
|
CP #20
|
|
JP Z,ADDERA
|
|
SORTC: LD A,(IX+11)
|
|
LD E,A
|
|
AND #08
|
|
JP NZ,ADDERA
|
|
LD A,E
|
|
AND #10
|
|
JP NZ,ITDIREC
|
|
LD B,11
|
|
LD D,XH
|
|
LD E,XL
|
|
SORT_00: LD A,(DE)
|
|
CP "A"
|
|
JP C,SORT_01
|
|
CP "["
|
|
JP NC,SORT_01
|
|
ADD A,#20
|
|
SORT_01: LD (DE),A
|
|
INC DE
|
|
DJNZ SORT_00
|
|
ITDIREC: LD D,XH
|
|
LD E,XL
|
|
CALL SORTER
|
|
LD HL,(FILES)
|
|
INC HL
|
|
LD (FILES),HL
|
|
ADDERA: LD BC,#0020
|
|
ADD IX,BC
|
|
JP SORT_
|
|
|
|
SORTER: LD HL,PLACED
|
|
SORTER0: LD A,(HL)
|
|
OR A
|
|
JP Z,SORTINS
|
|
PUSH DE
|
|
PUSH HL
|
|
LD B,11
|
|
SORT1: LD A,(DE) ;(DE) < (HL) "C"
|
|
CP (HL) ;(DE) >= (HL) "NC"
|
|
JP NZ,SORT2
|
|
INC DE
|
|
INC HL
|
|
DJNZ SORT1
|
|
SORT2: POP HL
|
|
POP DE
|
|
JP C,SORTINS
|
|
SORT3: LD BC,#0020
|
|
ADD HL,BC
|
|
JP SORTER0
|
|
SORTINS: PUSH DE
|
|
PUSH HL
|
|
EX DE,HL
|
|
LD HL,(ENDSORT)
|
|
PUSH HL
|
|
AND A
|
|
SBC HL,DE
|
|
LD B,H
|
|
LD C,L
|
|
POP DE
|
|
LD HL,#0020
|
|
ADD HL,DE
|
|
LD (ENDSORT),HL
|
|
JP Z,EMPPLC
|
|
EX DE,HL
|
|
DEC HL
|
|
DEC DE
|
|
LDDR
|
|
EMPPLC: POP DE
|
|
POP HL
|
|
LD BC,#0020
|
|
LDIR
|
|
RET
|
|
|
|
ENDSORT: DEFW #E020
|
|
|
|
PLACED: EQU #E000
|