internal boot can flip through pages

This commit is contained in:
Tolik 2025-06-16 04:41:18 +10:00
parent d297c9f907
commit ff7566be45
7 changed files with 1254 additions and 776 deletions

View File

@ -577,22 +577,25 @@ AUTO_0359:
; [x] 13/06/2025 boot loader from TR-DOS vROM
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
PREPARE_TO_vROM_BOOT:
LD A,(ZX_VARS.RUN_AUTO_BOOT)
AND A ; ¯à¨§­ ª ¯®¯ë⪨ § ¯ã᪠ boot ª®¬ ­¤®© RUN ¡¥§ ¯ à ¬¥â஢
JP Z,AUTO_03D9
;
DI
LD HL,(ZX_VARS.ADR_RET)
; PREPARE_TO_vROM_BOOT:
; LD A,(ZX_VARS.RUN_AUTO_BOOT)
; AND A ; ¯à¨§­ ª ¯®¯ë⪨ § ¯ã᪠ boot ª®¬ ­¤®© RUN ¡¥§ ¯ à ¬¥â஢
; JP Z,AUTO_03D9
; ;
; DI
; JP vROM_BOOT
vROM_BOOT: LD HL,(ZX_VARS.ADR_RET)
LD (ZX_VARS.FL_START),HL ; ¢à¥¬¥­­® á®å࠭塞 ADR_RET
LD HL,vROM_BOOT ;  ¤à¥á ¢®§¢à â  ¨§ AUTO_01D3
LD HL,vROM_BOOT.continue ;  ¤à¥á ¢®§¢à â  ¨§ AUTO_01D3
LD (ZX_VARS.ADR_RET),HL
JP AUTO_01D3
;
vROM_BOOT: LD HL,(ZX_VARS.FL_START)
;vROM_BOOT:
.continue: LD HL,(ZX_VARS.FL_START)
LD (ZX_VARS.ADR_RET),HL ; ¢®ááâ ­ ¢«¨¢ ¥¬ ADR_RET
;
LD HL,BOOT_PART_1.SIZE + BOOT_PART_2.SIZE
LD HL,BOOT_PART_1.SIZE + BOOT_PART_2.SIZE + BOOT_PART_3.SIZE
LD (ZX_VARS.FL_START),HL ; ¤«¨­  ¯à®£à ¬¬ë á ¯¥à¥¬¥­­ë¬¨.
LD (ZX_VARS.FL_LEN),HL ; ¤«¨­  ¯à®£à ¬¬ë á ¯¥à¥¬¥­­ë¬¨.
;
@ -608,7 +611,10 @@ vROM_BOOT: LD HL,(ZX_VARS.FL_START)
LD HL,BOOT_PART_2
LD BC,BOOT_PART_2.SIZE
LDIR
;
LD HL,BOOT_PART_3
LD BC,BOOT_PART_3.SIZE
LDIR
;LD HL,.StartAddr + BOOT_PART_1.SIZE + BOOT_PART_2.SIZE - 3
LD HL,vROM_Boot.StartLineNum
LD (ZX_VARS.E_LINE),HL
@ -1214,9 +1220,27 @@ AUTO_07E7:
WG93_EXE_:
AND 252
JP WG93_EXE
;**************************************
;**************************************
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; [x] 13/06/2025 boot loader from TR-DOS vROM
BOOT_PART_3: INCBIN 'build/boot.bin',429
.SIZE EQU $-BOOT_PART_3
;
; PREPARE_TO_vROM_BOOT:
; LD A,(ZX_VARS.RUN_AUTO_BOOT)
; AND A ; ¯à¨§­ ª ¯®¯ë⪨ § ¯ã᪠ boot ª®¬ ­¤®© RUN ¡¥§ ¯ à ¬¥â஢
; JP Z,AUTO_03D9
; DI
; JP vROM_BOOT
;**************************************
;**************************************
;INCLUDE 'trdos/tr_HDD_4.asz'
_mInfoBLOCK #0840-$,255
; _mInfoBLOCK #0840-$,255
INCLUDE 'trdos/tr_msd_3.asz'
@ -1224,7 +1248,7 @@ WG93_EXE_:
;!TODO russian charset
;ZG_RUS: DB 3 ; ¨¤¥­â¨ä¨ª â®à ¢¥àᨨ TR-DOS ???
;**************************************
INCLUDE 'trdos/tr_msd_2.asz'
;INCLUDE 'trdos/tr_msd_2.asz'
; DSS 0E00h,255
@ -6622,6 +6646,16 @@ REDIR_3D13:
JP EXP_FNS
;
; [x] 13/06/2025 boot loader from TR-DOS vROM
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
PREPARE_TO_vROM_BOOT:
LD A,(ZX_VARS.RUN_AUTO_BOOT)
AND A ; ¯à¨§­ ª ¯®¯ë⪨ § ¯ã᪠ boot ª®¬ ­¤®© RUN ¡¥§ ¯ à ¬¥â஢
JP Z,AUTO_03D9
DI
JP vROM_BOOT
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;*****************************
_mInfoBLOCK #3CFA - $,255
AUTO_3CFA:
@ -6725,6 +6759,8 @@ PRINT_CR:
LD A,#0D ; enter
PRINT_SYM:
JP PRINT_RED
;=======================================================================
_mInfoBLOCK #3D8F-$,#FF ; •…<E280A2>
DW 0000 ; ‡<>€…

View File

@ -19300,7 +19300,7 @@ JMP_EX: PUSH HL
; -------------------------------
; THE 'ZX SPECTRUM CHARACTER SET'
; -------------------------------
;; font
;; char-set
; $20 - Character: ' ' CHR$(32)

View File

@ -239,7 +239,7 @@ RESTORE_CURRENT_DIR:
RET
;
;ロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロ
BOOT_PART_2: INCBIN 'build/boot.bin',248
BOOT_PART_2: INCBIN 'build/boot.bin',248,181
.SIZE EQU $-BOOT_PART_2
;
; vROM_BOOT: DI
@ -266,4 +266,4 @@ BOOT_PART_2: INCBIN 'build/boot.bin',248
; ; JP CMD_RETURN
;ロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロロ
DISPLAY "TR_HDD_4.ASZ size: ",/A,$-File_Start
DISPLAY "===================================================="
DISPLAY "===================================================="

View File

@ -1,663 +0,0 @@
File_Start DEFL $
DISPLAY "===================================================="
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;**********************************
; MS-DOS system
;**********************************
MSDOS_FIND_FILE:
PUSH DE ; ˆŒŸ ˆ‘ŠŽŒŽƒŽ ”€‰‹€
CALL MSDOS_1ST_FL
POP DE
RET C
FIND_LOOP_ALL:
CALL MSDOS_KOMP_FL
RET Z ; އ<E280A1> - ”€‰‹ <20>€‰„…<E2809E> !!
;MSDOS_FIND_NEXT:
CALL MSDOS_NEXT_FL
JR NC,FIND_LOOP_ALL
RET
;***********************************************
;
; CHECK_BPB:
; IN A,(SLOT3)
; LD E,A
; LD A,SYS_PAGE
; DI
; OUT (SLOT3),A
; ;
; LD A,(SYS_PAGE.BPB_PARSED)
; ADD A,1
; ;
; LD A,E
; OUT (SLOT3),A
; EI
; RET
;***********************************************
MSDOS_1ST_FL:
PUSH DE
; 15/07/2024
;CALL CHECK_BPB
CALL READ_BPB
;CALL C,READ_BPB
;
CALL READ_1ST_DIR
POP DE
MSDOS_TEST_FL:
PUSH DE
DI
IN A,(SLOT3)
LD E,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,E
; [x] 07/07/2024 ¯à®¯ã᪠LFN
PUSH HL
LD DE,#0B ; FAT_DIRECTORY_RECORD.ATTRIBUT
ADD HL,DE
LD D,(HL)
POP HL
;
LD E,(HL)
OUT (SLOT3),A
EI
; [x] 07/07/2024 ¯à®¯ã᪠LFN
LD A,D
CP #0F ; FAT_ATTR.LFS_Entry
JR NZ,.nxt
POP DE
JR MSDOS_NEXT_FL
;
.nxt: LD A,E
POP DE
AND A
SCF
RET Z ; ŠŽ<C5A0> Š€’€‹Žƒ€
CP #E5
JR Z,MSDOS_NEXT_FL
AND A
RET
;**********************
MSDOS_NEXT_FL:
PUSH DE
LD DE,32 ; FAT_DIRECTORY_RECORD size
ADD HL,DE
DI
IN A,(SLOT3)
LD D,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(SYS_PAGE.COUNT_FL)
DEC A
LD (SYS_PAGE.COUNT_FL),A
LD E,A
LD A,D
OUT (SLOT3),A
; RET_PAGE3
EI
LD A,E
POP DE
AND A ; <><E28098>Ž CF !!
JR NZ,MSDOS_TEST_FL
PUSH DE
DI
IN A,(SLOT3)
LD D,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(SYS_PAGE.COUNT_SEC)
DEC A
LD (SYS_PAGE.COUNT_SEC),A
LD E,A
LD A,D
OUT (SLOT3),A
; RET_PAGE3
EI
LD A,E
POP DE
AND A
SCF
RET Z
PUSH DE
CALL READ_NEXT_DIR
POP DE
LD HL,SYS_PAGE.MS_DIR
JR MSDOS_TEST_FL
;**********************************
MSDOS_CAT:
PUSH DE
CALL AUTO_1D97 ; CLS
CALL OPEN_CH2
LD A,"\r"
RST #10
POP DE ; <E28098>ŽŠ€ <20>Ž… CAT
.loop: LD A,(DE)
CP " "
;JR NZ,CAT_NO_SPACE
INC DE
JR Z,.loop
DEC DE
;CAT_NO_SPACE:
CP "\r"
JR NZ,CAT_ALL
LD DE,CAT_FILES
CAT_ALL:
; CALL MSDOS_FIND_FILE
CALL MSDOS_1ST_FL
JR C,CAT_END
CAT_LOOP:
JR Z,CAT_NO_PRINT
CALL MSDOS_KOMP_FL
JR NZ,CAT_NO_PRINT
PUSH HL
PUSH DE
CALL OPEN_CH2
POP DE
POP HL
; CALL COPY_NAME_MSD
CALL PRINT_MSD_NAME
CALL PRINT_MSD_DATS
; CALL MSDOS_FIND_NEXT
CAT_NO_PRINT:
CALL MSDOS_NEXT_FL
JR NC,CAT_LOOP
CAT_END:
CALL OPEN_CH0
JP AUTO_03E1
PRINT_MSD_NAME:
PUSH HL
PUSH DE
LD HL,ZX_VARS.FL_NAME
LD A,' '
RST #10
LD A,' '
RST #10
;
LD B,8
.L1: LD A,(HL)
;AND #7F ; ¡ £ á ¨¬¥­¥¬, ¥á«¨ ­  FAT ¨¬¥­  á UTF8
RST #10
INC HL
DJNZ .L1
;
LD A,' '
RST #10
;
LD B,3
.L2: LD A,(HL)
;AND #7F ; ¡ £ á ¨¬¥­¥¬, ¥á«¨ ­  FAT ¨¬¥­  á UTF8
RST #10
INC HL
DJNZ .L2
;
LD A,6
RST #10
POP DE
POP HL
RET
PRINT_MSD_DATS:
PUSH HL
PUSH DE
LD HL,ZX_VARS.FL_PLACE+1
LD A,(HL)
DEC HL
CALL PRINT_HEX_A
LD A,(HL)
DEC HL
CALL PRINT_HEX_A
LD A,(HL)
DEC HL
CALL PRINT_HEX_A
LD A,' '
RST 10H
LD A,(HL)
DEC HL
CALL PRINT_HEX_A
LD A,(HL)
DEC HL
CALL PRINT_HEX_A
LD A,13
RST 10H
POP DE
POP HL
RET
;**********************************************
CAT_FILES: DB '*.*',13
;**********************************************
COPY_NAME_MSD:
PUSH HL
PUSH DE
DI
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,C
LD DE,ZX_VARS.FL_NAME
LD BC,11
LDIR
LD BC,15
ADD HL,BC
LD BC,5
LDIR
LD L,(HL)
OUT (SLOT3),A
; RET_PAGE3
EI
LD A,L
POP DE
POP HL
AND A ; A = 0 „‹Ÿ ”€‰‹€ „ˆ<E280B9>މ < 16 Œ¡.
RET
;*********************************************
;******************************************************
CMD_MSDOS: ; MS-DOS ª®¬ ­¤¥à !!
;******************************************************
CALL SINTAX_RET
LD HL,WORDS
LOOP_FIND2:
LD DE,(ZX_VARS.ADR_DOS_COM)
INC DE ; <20>யãáâ¨âì /
LD A,(HL)
AND A
JR Z,END_TAB
LD B,A
INC HL
LOOP_FIND:
LD A,(DE)
AND 223
CP (HL)
JR NZ,NEXT_WORD
INC DE
INC HL
DJNZ LOOP_FIND
LD A,(DE)
CP "\r"
JR Z,CMD_EXE1
CP ' '
JR Z,CMD_EXE
JR NEXT_WORD2
CMD_EXE:
INC DE
CMD_EXE1:
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
CALL JP_HL
JP AUTO_03E1
JP_HL: JP (HL)
NEXT_WORD:
INC HL
DJNZ NEXT_WORD
NEXT_WORD2:
INC HL
INC HL
JR LOOP_FIND2
END_TAB:
INC DE
LD A,(DE)
CP ':'
DEC DE
JR NZ,END_TAB3
LD A,(DE)
AND 223
SUB 'A'
JR C,END_TAB3
CP 4
JR NC,END_TAB2
LD (ZX_VARS.OPER_DISK),A
LD (ZX_VARS.CONT_DISK),A
LD B,A
LD A,(ZX_VARS.PDOS_COPY)
AND #7C
OR B
LD (ZX_VARS.PDOS_COPY),A
OUT (FDC_93.DrvCTRL),A
; [ ] 19/07/2024 ­  ª ¦¤ë© ¤¨áª âमá ᢮© à §¤¥« hdd ¬®¦­® § ¬ ¯¨âì
LD C,BIOS.GET_DISK_REDIR
CALL EXP_FNS
CP #40
JR C,.exit
;
AND #0F
LD C,BIOS.HDD_PART
CALL EXP_FNS
;LD HL,MSG_3
;CALL C,AUTO_03C3
;
.exit: JP AUTO_03E1
END_TAB2:
SUB 4
CP SYS_PAGE.RAMD_KEYS.NUM
JR NC,END_TAB3
CALL RAMD_SET1
JP AUTO_03E1
END_TAB3:
LD A,0
JP LOAD_RMD_XX
MSD_ERR:
LD HL,MSDOS_MSG ; File not found...
JP AUTO_03E4
;************************************
LOAD_RMD:
CALL RAMD_SYM ; ¯®«ãç¨âì ­®¬¥à RAM-Disk ¨§ (DE)
JP C,MSD_ERR
LOAD_RMD_XX:
LD (ZX_VARS.MED_START+1),A ; á®åà ­¨âì
CALL MSDOS_FIND_FILE
JP C,MSD_ERR
CALL RMD_BLKS_FL ; B - ç¨á«® ¡«®ª®¢ , DE -  ¡á®«îâ­ë© ᥪâ®à
LD A,(ZX_VARS.MED_START+1)
PUSH AF
CALL CLEAR_RMD_A ; ®á¢®¡®¤¨âì RAM-Disk A
POP AF
CALL GET_RMD_A ; ãáâ ­®¢¨âì RAM-Disk A à §¬¥à®¬ B
LD HL,#C000
CALL MSDOS_READ_FILE
JP AUTO_03E1
SAVE_RMD:
CALL RAMD_SYM ; ¯®«ãç¨âì ­®¬¥à RAM-Disk ¨§ (DE)
JP C,MSD_ERR
LD (ZX_VARS.MED_START+1),A
CALL MSDOS_FIND_FILE
JP C,MSD_ERR
CALL RMD_BLKS_FL
LD A,(ZX_VARS.MED_START+1)
CALL TEST_RAMD ; ¯à®¢¥à¨âì ­ «¨ç¨¥ RAM-Disk A à §¬¥à®¬ B
JP C,MSD_ERR ; A - ­®¬¥à ¯¥à¢®£® ¡«®ª 
JP Z,MSD_ERR
LD HL,#C000
CALL MSDOS_WRITE_FILE
JP AUTO_03E1
RMD_BLKS_FL:
LD A,(ZX_VARS.FL_SIZE+2)
PUSH HL
LD HL,(ZX_VARS.FL_SIZE)
LD B,A
AND A
RL L
RL H
RL B
AND A
RL L
RL H
RL B
LD A,H
OR L
JR Z,RMD_BLKS_L2
INC B
RMD_BLKS_L2:
POP HL
RET ; B - —ˆ‘‹Ž <20>ŽŠŽ RAM_DISK
;****************************************
; DE - ˆŒŸ ”€‰‹€ ‘Ž *,?
; HL - ˆŒŸ Š€’€‹Žƒ…
MSDOS_KOMP_FL:
CALL COPY_NAME_MSD ; <20><EFBFBD>…Œ…ˆœ ˆŒŸ Ž<>œ TR-DOS
LD A,(ZX_VARS.FL_NAME)
AND A
JR NZ,KOMP_CONT1
LD A,2 ; ŠŽ<C5A0> Š€’€‹Žƒ€
AND A ; NZ - ˆŒŸ <20>Ž<C5BD>€„€…
RET
KOMP_CONT1:
CP 0A5h
JR NZ,KOMP_CONT2
LD A,1 ; <E28099>‰ ”€‰‹ - ˆŒŸ <20>Ž<C5BD>€„€…
AND A
RET
KOMP_CONT2:
PUSH DE
PUSH HL
LD HL,ZX_VARS.FL_NAME
CALL MSDOS_KOMP_ALL
POP HL
POP DE
RET
MSDOS_KOMP_ALL:
LD A,(DE)
INC DE
CP " "
JR Z,MSDOS_KOMP_ALL
CP "\r"
JR Z,KOMP_ERROR_NAME ; <20><E2809A><E280A6>Ž… ˆŒŸ
DEC DE
LD B,8
CALL KOMP_TX
RET NZ
LD A,(DE)
CP "."
JR Z,KOMP_POINT
CP "\r"
JR Z,KOMP_SPACING3
CP " "
JR Z,KOMP_SPACING3
KOMP_ERROR_NAME: ; <20><E2809A><E280A6>Ž… ˆŒŸ
LD A,1
AND A
RET
KOMP_POINT:
INC DE
LD B,3
CALL KOMP_TX
RET NZ
LD A,(DE)
CP 13
RET Z
CP 20H
RET Z
JR KOMP_ERROR_NAME
;****************************************************
KOMP_TX:
LD A,(DE)
CP "\r"
JR Z,KOMP_SPACING
CP " "
JR Z,KOMP_SPACING
CP "."
JR Z,KOMP_SPACING
CP "?"
JR Z,KOMP_EX_OK
CP "*"
JR Z,KOMP_EX_OK2
CP "a"
JR C,KOMP_EXEC
CP "z"+1
JR NC,KOMP_EXEC
AND %1101'1111
KOMP_EXEC:
CP (HL)
RET NZ ; ­¥â ᮢ¯ ¤¥­¨ï
KOMP_EX_OK:
INC DE
KOMP_EX_OK2:
INC HL
DJNZ KOMP_TX
CP '*'
JR NZ,KOMP_NO_STAR1
INC DE
KOMP_NO_STAR1:
XOR A
RET
KOMP_SPACING3:
LD B,3
KOMP_SPACING:
LD A,20H
KOMP_L2:
CP (HL)
INC HL
RET NZ
DJNZ KOMP_L2
RET
;************************************************
CALC_CLAST: ; HL - áâ àâ®¢ë© ª« áâ¥à
PUSH BC
PUSH HL
DEC HL
DEC HL
DI
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE)
EX DE,HL
LD BC,0
LD H,B
LD L,B
LD HX,B
LD LX,B
CALC_CL_LP:
ADD IX,DE
ADC HL,BC
DEC A
JR NZ,CALC_CL_LP
LD DE,(SYS_PAGE.MSD_DAT_SEC)
LD BC,(SYS_PAGE.MSD_DAT_SEC2)
ADD IX,DE
ADC HL,BC ; HL,IX - Œ…™…<E284A2>ˆ… Š<E28099>€ Ž’ <20>€—€€ „€<E2809E><E282AC>
EX AF,AF'
OUT (SLOT3),A
PUSH IX
EX (SP),HL
POP IX
EX DE,HL
EI
POP HL
POP BC
RET
HD_TX: DC ' - HDD error'
;HD_TX: DC 'HDD error #'
HD_TX2: DC 'HDD not found'
MSG_3: DC '*ERROR*'
MSDOS_MSG: DC 'File not found'
NO_MEMORY: DC 'Out of memory'
;NO_MEMORY: DC 'No RAM-Disk MEM'
WORDS:
DB 3,'CAT' ; ª â «®£ MS-DOS
DW MSDOS_CAT
DB 3,'DIR' ; ª â «®£ MS-DOS
DW MSDOS_CAT
DB 3,'HDD' ; ¯®¤ª«îç¨âì HDD
DW HDD_SET
DB 3,'FDD' ; ¯®¤ª«îç¨âì FDD
DW FDD_SET
DB 3,'RMD' ; ¯®¤ª«îç¨âì RMD
DW RAMD_SET
DB 3,'HDT' ; â¥áâ HDD
DW HDD_PROG
DB 2,'RD' ; â¥áâ RAM-Disk space
DW RAMD_FAT_PROG
DB 4,'SAVE' ; á®åà ­¨âì RAM-Disk
DW SAVE_RMD
DB 4,'LOAD' ; § £à㧨âì RAM-Disk
DW LOAD_RMD
DB 4,'TBON' ; ¢ª«îç¨âì âãà¡®
DW TB_ONOFF
DB 5,'TBOFF' ; ¢ëª«îç¨âì âãà¡®
DW TB_ONOFF
DB 4,'INIT' ; २­¨§¨ «¨§ æ¨ï
DW INIT_RMD
DB 5,'CLEAR' ; ®ç¨áâ¨âì RAM-Disk
DW CLEAR_RAMD_X
DB 8,"SPRINTER"
DW SPR_1
DB 2,"AY"
DW AY8910
DB 0
;SAVE_AUTOEXEC:
; LD C,0FEH
; CALL EXP_FNS
; RET
AY8910:
LD A,#EA
LD C,#F3 ;!HARDCODE BIOS.SPRINTER_ALL
CALL EXP_FNS
;!TEST 06/01/2024 á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨© § ç¥¬-â®
;EI
;
CALL AUTO_1D97
AND A
RET
SPR_1: LD A,(DE)
INC DE
CP " "
JR Z,SPR_1
CP "1"
LD C,BIOS.RST_CONF.SP97_1
JR Z,SP_1
CP "2"
SCF
RET NZ
LD C,BIOS.RST_CONF.SP97_2
SP_1: LD A,(DE)
CP " "+1
CCF
RET C
CALL EXP_FNS
CALL AUTO_1D97
AND A
RET
;****************************************************
;*****************************************
; ERRORS
;*****************************************
; 0 - ƒ<E282AC>€Ÿ <20><>Ž<E2809A>Š€ <20><>Žƒ<C5BD>€ŒŒ
; 1 - <20><E2809A><E280A6>‰ ”Ž<E2809D>Œ€ ˆŒ…<C592>ˆ
; 2 - ŠŽ<C5A0> Š€’€‹Žƒ€
;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
DISPLAY "TR_MSD_2.ASZ size: ",/A,$-File_Start
DISPLAY "===================================================="

View File

@ -565,7 +565,664 @@ GET_FL_L2:
RET Z
INC BC
RET
;***********************************************************************
;**********************************
; MS-DOS system
;**********************************
MSDOS_FIND_FILE:
PUSH DE ; ˆŒŸ ˆ‘ŠŽŒŽƒŽ ”€‰‹€
CALL MSDOS_1ST_FL
POP DE
RET C
FIND_LOOP_ALL:
CALL MSDOS_KOMP_FL
RET Z ; އ<E280A1> - ”€‰‹ <20>€‰„…<E2809E> !!
;MSDOS_FIND_NEXT:
CALL MSDOS_NEXT_FL
JR NC,FIND_LOOP_ALL
RET
;***********************************************
;
; CHECK_BPB:
; IN A,(SLOT3)
; LD E,A
; LD A,SYS_PAGE
; DI
; OUT (SLOT3),A
; ;
; LD A,(SYS_PAGE.BPB_PARSED)
; ADD A,1
; ;
; LD A,E
; OUT (SLOT3),A
; EI
; RET
;***********************************************
MSDOS_1ST_FL:
PUSH DE
; 15/07/2024
;CALL CHECK_BPB
CALL READ_BPB
;CALL C,READ_BPB
;
CALL READ_1ST_DIR
POP DE
MSDOS_TEST_FL:
PUSH DE
DI
IN A,(SLOT3)
LD E,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,E
; [x] 07/07/2024 ¯à®¯ã᪠LFN
PUSH HL
LD DE,#0B ; FAT_DIRECTORY_RECORD.ATTRIBUT
ADD HL,DE
LD D,(HL)
POP HL
;
LD E,(HL)
OUT (SLOT3),A
EI
; [x] 07/07/2024 ¯à®¯ã᪠LFN
LD A,D
CP #0F ; FAT_ATTR.LFS_Entry
JR NZ,.nxt
POP DE
JR MSDOS_NEXT_FL
;
.nxt: LD A,E
POP DE
AND A
SCF
RET Z ; ŠŽ<C5A0> Š€’€‹Žƒ€
CP #E5
JR Z,MSDOS_NEXT_FL
AND A
RET
;**********************
MSDOS_NEXT_FL:
PUSH DE
LD DE,32 ; FAT_DIRECTORY_RECORD size
ADD HL,DE
DI
IN A,(SLOT3)
LD D,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(SYS_PAGE.COUNT_FL)
DEC A
LD (SYS_PAGE.COUNT_FL),A
LD E,A
LD A,D
OUT (SLOT3),A
; RET_PAGE3
EI
LD A,E
POP DE
AND A ; <><E28098>Ž CF !!
JR NZ,MSDOS_TEST_FL
PUSH DE
DI
IN A,(SLOT3)
LD D,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(SYS_PAGE.COUNT_SEC)
DEC A
LD (SYS_PAGE.COUNT_SEC),A
LD E,A
LD A,D
OUT (SLOT3),A
; RET_PAGE3
EI
LD A,E
POP DE
AND A
SCF
RET Z
PUSH DE
CALL READ_NEXT_DIR
POP DE
LD HL,SYS_PAGE.MS_DIR
JR MSDOS_TEST_FL
;**********************************
MSDOS_CAT:
PUSH DE
CALL AUTO_1D97 ; CLS
CALL OPEN_CH2
LD A,"\r"
RST #10
POP DE ; <E28098>ŽŠ€ <20>Ž… CAT
.loop: LD A,(DE)
CP " "
;JR NZ,CAT_NO_SPACE
INC DE
JR Z,.loop
DEC DE
;CAT_NO_SPACE:
CP "\r"
JR NZ,CAT_ALL
LD DE,CAT_FILES
CAT_ALL:
; CALL MSDOS_FIND_FILE
CALL MSDOS_1ST_FL
JR C,CAT_END
CAT_LOOP:
JR Z,CAT_NO_PRINT
CALL MSDOS_KOMP_FL
JR NZ,CAT_NO_PRINT
PUSH HL
PUSH DE
CALL OPEN_CH2
POP DE
POP HL
; CALL COPY_NAME_MSD
CALL PRINT_MSD_NAME
CALL PRINT_MSD_DATS
; CALL MSDOS_FIND_NEXT
CAT_NO_PRINT:
CALL MSDOS_NEXT_FL
JR NC,CAT_LOOP
CAT_END:
CALL OPEN_CH0
JP AUTO_03E1
PRINT_MSD_NAME:
PUSH HL
PUSH DE
LD HL,ZX_VARS.FL_NAME
LD A,' '
RST #10
LD A,' '
RST #10
;
LD B,8
.L1: LD A,(HL)
;AND #7F ; ¡ £ á ¨¬¥­¥¬, ¥á«¨ ­  FAT ¨¬¥­  á UTF8
RST #10
INC HL
DJNZ .L1
;
LD A,' '
RST #10
;
LD B,3
.L2: LD A,(HL)
;AND #7F ; ¡ £ á ¨¬¥­¥¬, ¥á«¨ ­  FAT ¨¬¥­  á UTF8
RST #10
INC HL
DJNZ .L2
;
LD A,6
RST #10
POP DE
POP HL
RET
PRINT_MSD_DATS:
PUSH HL
PUSH DE
LD HL,ZX_VARS.FL_PLACE+1
LD A,(HL)
DEC HL
CALL PRINT_HEX_A
LD A,(HL)
DEC HL
CALL PRINT_HEX_A
LD A,(HL)
DEC HL
CALL PRINT_HEX_A
LD A,' '
RST 10H
LD A,(HL)
DEC HL
CALL PRINT_HEX_A
LD A,(HL)
DEC HL
CALL PRINT_HEX_A
LD A,13
RST 10H
POP DE
POP HL
RET
;**********************************************
CAT_FILES: DB '*.*',13
;**********************************************
COPY_NAME_MSD:
PUSH HL
PUSH DE
DI
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,C
LD DE,ZX_VARS.FL_NAME
LD BC,11
LDIR
LD BC,15
ADD HL,BC
LD BC,5
LDIR
LD L,(HL)
OUT (SLOT3),A
; RET_PAGE3
EI
LD A,L
POP DE
POP HL
AND A ; A = 0 „‹Ÿ ”€‰‹€ „ˆ<E280B9>މ < 16 Œ¡.
RET
;*********************************************
;******************************************************
CMD_MSDOS: ; MS-DOS ª®¬ ­¤¥à !!
;******************************************************
CALL SINTAX_RET
LD HL,WORDS
LOOP_FIND2:
LD DE,(ZX_VARS.ADR_DOS_COM)
INC DE ; <20>யãáâ¨âì /
LD A,(HL)
AND A
JR Z,END_TAB
LD B,A
INC HL
LOOP_FIND:
LD A,(DE)
AND 223
CP (HL)
JR NZ,NEXT_WORD
INC DE
INC HL
DJNZ LOOP_FIND
LD A,(DE)
CP "\r"
JR Z,CMD_EXE1
CP ' '
JR Z,CMD_EXE
JR NEXT_WORD2
CMD_EXE:
INC DE
CMD_EXE1:
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
CALL JP_HL
JP AUTO_03E1
JP_HL: JP (HL)
NEXT_WORD:
INC HL
DJNZ NEXT_WORD
NEXT_WORD2:
INC HL
INC HL
JR LOOP_FIND2
END_TAB:
INC DE
LD A,(DE)
CP ':'
DEC DE
JR NZ,END_TAB3
LD A,(DE)
AND 223
SUB 'A'
JR C,END_TAB3
CP 4
JR NC,END_TAB2
LD (ZX_VARS.OPER_DISK),A
LD (ZX_VARS.CONT_DISK),A
LD B,A
LD A,(ZX_VARS.PDOS_COPY)
AND #7C
OR B
LD (ZX_VARS.PDOS_COPY),A
OUT (FDC_93.DrvCTRL),A
; [ ] 19/07/2024 ­  ª ¦¤ë© ¤¨áª âमá ᢮© à §¤¥« hdd ¬®¦­® § ¬ ¯¨âì
LD C,BIOS.GET_DISK_REDIR
CALL EXP_FNS
CP #40
JR C,.exit
;
AND #0F
LD C,BIOS.HDD_PART
CALL EXP_FNS
;LD HL,MSG_3
;CALL C,AUTO_03C3
;
.exit: JP AUTO_03E1
END_TAB2:
SUB 4
CP SYS_PAGE.RAMD_KEYS.NUM
JR NC,END_TAB3
CALL RAMD_SET1
JP AUTO_03E1
END_TAB3:
LD A,0
JP LOAD_RMD_XX
MSD_ERR:
LD HL,MSDOS_MSG ; File not found...
JP AUTO_03E4
;************************************
LOAD_RMD:
CALL RAMD_SYM ; ¯®«ãç¨âì ­®¬¥à RAM-Disk ¨§ (DE)
JP C,MSD_ERR
LOAD_RMD_XX:
LD (ZX_VARS.MED_START+1),A ; á®åà ­¨âì
CALL MSDOS_FIND_FILE
JP C,MSD_ERR
CALL RMD_BLKS_FL ; B - ç¨á«® ¡«®ª®¢ , DE -  ¡á®«îâ­ë© ᥪâ®à
LD A,(ZX_VARS.MED_START+1)
PUSH AF
CALL CLEAR_RMD_A ; ®á¢®¡®¤¨âì RAM-Disk A
POP AF
CALL GET_RMD_A ; ãáâ ­®¢¨âì RAM-Disk A à §¬¥à®¬ B
LD HL,#C000
CALL MSDOS_READ_FILE
JP AUTO_03E1
SAVE_RMD:
CALL RAMD_SYM ; ¯®«ãç¨âì ­®¬¥à RAM-Disk ¨§ (DE)
JP C,MSD_ERR
LD (ZX_VARS.MED_START+1),A
CALL MSDOS_FIND_FILE
JP C,MSD_ERR
CALL RMD_BLKS_FL
LD A,(ZX_VARS.MED_START+1)
CALL TEST_RAMD ; ¯à®¢¥à¨âì ­ «¨ç¨¥ RAM-Disk A à §¬¥à®¬ B
JP C,MSD_ERR ; A - ­®¬¥à ¯¥à¢®£® ¡«®ª 
JP Z,MSD_ERR
LD HL,#C000
CALL MSDOS_WRITE_FILE
JP AUTO_03E1
RMD_BLKS_FL:
LD A,(ZX_VARS.FL_SIZE+2)
PUSH HL
LD HL,(ZX_VARS.FL_SIZE)
LD B,A
AND A
RL L
RL H
RL B
AND A
RL L
RL H
RL B
LD A,H
OR L
JR Z,RMD_BLKS_L2
INC B
RMD_BLKS_L2:
POP HL
RET ; B - —ˆ‘‹Ž <20>ŽŠŽ RAM_DISK
;****************************************
; DE - ˆŒŸ ”€‰‹€ ‘Ž *,?
; HL - ˆŒŸ Š€’€‹Žƒ…
MSDOS_KOMP_FL:
CALL COPY_NAME_MSD ; <20><EFBFBD>…Œ…ˆœ ˆŒŸ Ž<>œ TR-DOS
LD A,(ZX_VARS.FL_NAME)
AND A
JR NZ,KOMP_CONT1
LD A,2 ; ŠŽ<C5A0> Š€’€‹Žƒ€
AND A ; NZ - ˆŒŸ <20>Ž<C5BD>€„€…
RET
KOMP_CONT1:
CP 0A5h
JR NZ,KOMP_CONT2
LD A,1 ; <E28099>‰ ”€‰‹ - ˆŒŸ <20>Ž<C5BD>€„€…
AND A
RET
KOMP_CONT2:
PUSH DE
PUSH HL
LD HL,ZX_VARS.FL_NAME
CALL MSDOS_KOMP_ALL
POP HL
POP DE
RET
MSDOS_KOMP_ALL:
LD A,(DE)
INC DE
CP " "
JR Z,MSDOS_KOMP_ALL
CP "\r"
JR Z,KOMP_ERROR_NAME ; <20><E2809A><E280A6>Ž… ˆŒŸ
DEC DE
LD B,8
CALL KOMP_TX
RET NZ
LD A,(DE)
CP "."
JR Z,KOMP_POINT
CP "\r"
JR Z,KOMP_SPACING3
CP " "
JR Z,KOMP_SPACING3
KOMP_ERROR_NAME: ; <20><E2809A><E280A6>Ž… ˆŒŸ
LD A,1
AND A
RET
KOMP_POINT:
INC DE
LD B,3
CALL KOMP_TX
RET NZ
LD A,(DE)
CP 13
RET Z
CP 20H
RET Z
JR KOMP_ERROR_NAME
;****************************************************
KOMP_TX:
LD A,(DE)
CP "\r"
JR Z,KOMP_SPACING
CP " "
JR Z,KOMP_SPACING
CP "."
JR Z,KOMP_SPACING
CP "?"
JR Z,KOMP_EX_OK
CP "*"
JR Z,KOMP_EX_OK2
CP "a"
JR C,KOMP_EXEC
CP "z"+1
JR NC,KOMP_EXEC
AND %1101'1111
KOMP_EXEC:
CP (HL)
RET NZ ; ­¥â ᮢ¯ ¤¥­¨ï
KOMP_EX_OK:
INC DE
KOMP_EX_OK2:
INC HL
DJNZ KOMP_TX
CP '*'
JR NZ,KOMP_NO_STAR1
INC DE
KOMP_NO_STAR1:
XOR A
RET
KOMP_SPACING3:
LD B,3
KOMP_SPACING:
LD A,20H
KOMP_L2:
CP (HL)
INC HL
RET NZ
DJNZ KOMP_L2
RET
;************************************************
CALC_CLAST: ; HL - áâ àâ®¢ë© ª« áâ¥à
PUSH BC
PUSH HL
DEC HL
DEC HL
DI
IN A,(SLOT3)
EX AF,AF'
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(SYS_PAGE.MS_BPB+CLAST_SIZE)
EX DE,HL
LD BC,0
LD H,B
LD L,B
LD HX,B
LD LX,B
CALC_CL_LP:
ADD IX,DE
ADC HL,BC
DEC A
JR NZ,CALC_CL_LP
LD DE,(SYS_PAGE.MSD_DAT_SEC)
LD BC,(SYS_PAGE.MSD_DAT_SEC2)
ADD IX,DE
ADC HL,BC ; HL,IX - Œ…™…<E284A2>ˆ… Š<E28099>€ Ž’ <20>€—€€ „€<E2809E><E282AC>
EX AF,AF'
OUT (SLOT3),A
PUSH IX
EX (SP),HL
POP IX
EX DE,HL
EI
POP HL
POP BC
RET
HD_TX: DC ' - HDD error'
;HD_TX: DC 'HDD error #'
HD_TX2: DC 'HDD not found'
MSG_3: DC '*ERROR*'
MSDOS_MSG: DC 'File not found'
NO_MEMORY: DC 'Out of memory'
;NO_MEMORY: DC 'No RAM-Disk MEM'
WORDS:
DB 3,'CAT' ; ª â «®£ MS-DOS
DW MSDOS_CAT
DB 3,'DIR' ; ª â «®£ MS-DOS
DW MSDOS_CAT
DB 3,'HDD' ; ¯®¤ª«îç¨âì HDD
DW HDD_SET
DB 3,'FDD' ; ¯®¤ª«îç¨âì FDD
DW FDD_SET
DB 3,'RMD' ; ¯®¤ª«îç¨âì RMD
DW RAMD_SET
DB 3,'HDT' ; â¥áâ HDD
DW HDD_PROG
DB 2,'RD' ; â¥áâ RAM-Disk space
DW RAMD_FAT_PROG
DB 4,'SAVE' ; á®åà ­¨âì RAM-Disk
DW SAVE_RMD
DB 4,'LOAD' ; § £à㧨âì RAM-Disk
DW LOAD_RMD
DB 4,'TBON' ; ¢ª«îç¨âì âãà¡®
DW TB_ONOFF
DB 5,'TBOFF' ; ¢ëª«îç¨âì âãà¡®
DW TB_ONOFF
DB 4,'INIT' ; २­¨§¨ «¨§ æ¨ï
DW INIT_RMD
DB 5,'CLEAR' ; ®ç¨áâ¨âì RAM-Disk
DW CLEAR_RAMD_X
DB 8,"SPRINTER"
DW SPR_1
DB 2,"AY"
DW AY8910
DB 0
;SAVE_AUTOEXEC:
; LD C,0FEH
; CALL EXP_FNS
; RET
AY8910:
LD A,#EA
LD C,#F3 ;!HARDCODE BIOS.SPRINTER_ALL
CALL EXP_FNS
;!TEST 06/01/2024 á®å࠭塞 á®áâ®ï­¨¥ ¯à¥à뢠­¨© § ç¥¬-â®
;EI
;
CALL AUTO_1D97
AND A
RET
SPR_1: LD A,(DE)
INC DE
CP " "
JR Z,SPR_1
CP "1"
LD C,BIOS.RST_CONF.SP97_1
JR Z,SP_1
CP "2"
SCF
RET NZ
LD C,BIOS.RST_CONF.SP97_2
SP_1: LD A,(DE)
CP " "+1
CCF
RET C
CALL EXP_FNS
CALL AUTO_1D97
AND A
RET
;****************************************************
;*****************************************
; ERRORS
;*****************************************
; 0 - ƒ<E282AC>€Ÿ <20><>Ž<E2809A>Š€ <20><>Žƒ<C5BD>€ŒŒ
; 1 - <20><E2809A><E280A6>‰ ”Ž<E2809D>Œ€ ˆŒ…<C592>ˆ
; 2 - ŠŽ<C5A0> Š€’€‹Žƒ€
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
DISPLAY "TR_MSD_3.ASZ size: ",/A,$-File_Start
DISPLAY "===================================================="
DISPLAY "===================================================="

View File

@ -6,6 +6,7 @@
;=======================================================================
collor_A EQU 0x03
collor_B EQU 0x02
collor_N EQU 0x04
collor_M EQU 0x08
collor_T EQU 0x07
org_addr EQU #5d3b
@ -27,154 +28,178 @@ filename: DB "boot ",#22,#3a ; ':' 'rem' run
;org #5d65
start: LD (memSP),SP
NewDisk: XOR A
OUT (0xfe),A
; ld de, 0x5aff
; .l0
; ld (de), a
; dec de
; cp d
; jr nz, .l0
LD (ZX_VARS.ATTR_P),A
LD (ZX_VARS.BORDER),A
CALL BASIC_FN.x48.cls
LD BC,0x0905
NewDisk: ;CALL clear_screen
LD BC,#0905
LD DE,0
LD HL,catBuff
;.3 nop
CALL 0x3d13
CALL #3D13
LD A,"a"
LD (main.markPos),A
main: LD A,collor_T
LD A,1
JP keys.setCP
;
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ALIGN #10
TXT_BUTTONS:
.prev: DB '<<< PgUp'
.next: DB 'PgDn >>>'
;
main.CurrentPage:
DB 1
main.PagesCounter:
DB 1
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
main: LD A,(.CurrentPage)
LD (.PagesCounter),A
.nextLoop: LD A,collor_T
LD (var_collor),A
LD HL,0x50cc
LD HL,#50CC
LD (var_printPos),HL
LD HL,catBuff+0x08f5
LD HL,catBuff + #08F5
LD B,8
.p1: LD A,(HL)
PUSH HL
CALL printChar
POP HL
INC L
LD A,L
CP low (catBuff+0x08fd)
JR NZ,.p1
DJNZ .p1
; LD A,L
; CP low (catBuff + #08FD)
; JR NZ,.p1
LD HL,0x4000
LD HL,#4000
LD (var_printPos),HL
LD HL,catBuff
; ¢ëç¨â뢠­¨¥ ª â «®£ 
.buffPointer+1: LD HL,catBuff
.markPos+2: LD BC,"aa"
.l1: LD A,(HL)
DEC A
JR Z,.n1
JP M,.e1
;boot detect
; cp "b"-1
; jr nz, .s2
; inc l
; ld a, "o"
; cp (hl)
; jr nz, .s2
; inc l
; cp (hl)
; jr nz, .s2
; inc l
; ld a, (hl)
; cp "t"
; jr nz, .s2
; .l4: inc l
; bit 3, l
; jr z, .n1
; ld a, " "
; cp (hl)
; jr z, .l4
;
.s2: LD A,L
AND 0xf0
ADD A,0x08
LD L,A
JR Z,.nextRec
;
JP M,DirShowDone
;
SET 3,L
LD A,(HL)
CP "B"
RES 3,L
JR NZ,.n1
JR NZ,.nextRec
; ¤¢¥ á¯¥æ ª­®¯ª¨
LD A,C ; C - ⥪ã騩 ä ©«
CP "y"
JR NC,PRINT_NEXT_BUTTONS ; "::PREV::" "::NEXT::"
;
; ¯à®å®¤­®© ¯à®£®­?
LD A,(.PagesCounter)
DEC A
JR NZ,.nextHiddenRec
; basic file
LD A,C
CP B
CP B ; ¢ë¡à ­­ë© ä ©«
LD A,collor_A
JR NZ,.s1
JR NZ,.notMarked
; ¢ë¤¥«¥­¨¥ ä ©«  ¨ ª®¯¨à®¢ ­¨¥ ¥£® ¢ áâப㠧 ¯ã᪠
XOR collor_M
;
LD DE,filename
PUSH BC
LD BC,0x08
LD BC,8
LDIR
POP BC
RES 3,L
.s1: LD (var_collor),A
LD A,C
PUSH HL
CALL printChar
LD A," "
CALL printChar
POP HL
.l2: LD A,(HL)
INC HL
PUSH HL
CALL printChar
POP HL
LD A,L
AND 0x07
JR NZ,.l2
LD A,(var_printPos)
AND 0x1f
JR Z,.s3
LD A," "
PUSH HL
CALL printChar
POP HL
.s3: INC C
.n1: LD A,L
AND 0xf0
LD L,A
LD DE,0x0010
;
.notMarked: CALL prn_txt
.nextHiddenRec: INC C
.nextRec: LD DE,#10
ADD HL,DE
JR .l1
.e1:; ld a, c
; sub "a"
; ld (var_files), a
;
PRINT_NEXT_BUTTONS:
LD A,(main.PagesCounter)
LD (keys.nxtPage),A
DEC A
JR Z,.noChange
LD (main.PagesCounter),A
LD (main.buffPointer),HL
.noChange: PUSH AF
CALL PRINT_HELP
POP AF
JP Z,keys
JR keys.toMain
PRINT_HELP: LD HL,#5040
LD (var_printPos),HL
LD A,collor_N
PUSH BC
LD C," "
LD HL,TXT_BUTTONS.prev
CALL prn_txt
;
LD A,collor_N
CALL prn_txt
;
POP BC
RET
;
DirShowDone: XOR A
LD (keys.nxtPage),A
CALL PRINT_HELP
keys: RES 5,(iy+1)
.w1: BIT 5,(iy+1)
JR Z,.w1
LD A,(iy-0x32)
LD A,(iy-#32)
;
CP B
JR Z,exit
CP 0x0d
CP #0D ; enter
JR Z,exit
CP " "
CP " " ; space
JP Z,NewDisk
CP #08 ; left
;
CP #04 ; pgUp
LD E,-1
JR Z,.prevPage
;
.pgdn: CP #05 ; pgDn
LD E,1
JR Z,.nextPage
;
.left: CP #08 ; left
JR NZ,.sl
DEC B
JR .c1
;
.sl: CP #0B ; up
JR NZ,.sd
DEC B
DEC B
DEC B
JR .c1
;
.sd: CP #0A ; down
JR NZ,.su
INC B
INC B
INC B
JR .c1
;
.su: CP #09 ; right
JR NZ,.sr
INC B
JR .c1
;
.sr: CP "a"
JR C,keys
CP C
JR NC,keys
LD B,A
;
.c1: LD A,B
CP "a"
JR NC,.sf1
@ -184,8 +209,30 @@ keys: RES 5,(iy+1)
LD A,C
DEC A
.sf2: LD (main.markPos),A
JP main
; var_files db 0
.toMain: JP main.nextLoop
; DE - +24 or -24
.nextPage: ;
.nxtPage+1: LD A,0
AND A
JR Z,.skip
XOR A
LD (.nxtPage),A
;
; DE - +24 or -24
.prevPage: LD A,(main.CurrentPage)
ADD A,E
JR Z,.skip
;
.setCP: LD H,A
LD L,A
LD (main.CurrentPage),HL
LD HL,catBuff
LD (main.buffPointer),HL
.skip: CALL clear_screen
JR .toMain
exit:
memSP+1: LD SP,0
@ -234,8 +281,9 @@ var_printPos+1: LD DE,0x4000
var_collor+1: LD A,0
LD (HL),A
SET 5,L
XOR collor_A^collor_B
XOR collor_A ^ collor_B
LD (HL),A
;
LD HL,var_printPos
LD A,(HL)
ADD A,0x21
@ -247,7 +295,69 @@ var_collor+1: LD A,0
ADD A,0x08
LD (HL),A
RET
;
;
;
clear_screen: XOR A
OUT (0xfe),A
LD (ZX_VARS.ATTR_P),A
LD (ZX_VARS.BORDER),A
JP BASIC_FN.x48.cls
; A - current file
; choose_color: CP B ; ¢ë¡à ­­ë© ä ©«. #C7
; LD A,collor_A
; SCF
; RET NZ
; XOR collor_M
; RET
; A - COLOR
; C - char of text button
; HL - Text
prn_txt: LD (var_collor),A
LD A,C
PUSH HL
CALL printChar
LD A," "
CALL printChar
POP HL
;
.loop: LD A,(HL)
INC HL
PUSH HL
CALL printChar
POP HL
LD A,L
AND 0x07
JR NZ,.loop
;
LD A,(var_printPos)
AND 0x1f
RET Z
LD A," "
PUSH HL
CALL printChar
POP HL
RET
;
;
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ALIGN #10
; TXT_BUTTONS:
; .prev: DB '<< PgDn '
; .next: DB '>> PgUp '
; ;
; main.CurrentPage:
; DB 1
; main.PagesCounter:
; DB 1
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
StartLineNum: DB 0
DW 0
;DB #80
@ -258,8 +368,346 @@ l2end:
;ds -$&0x0f
;ALIGN #10
;filename EQU $
catBuff EQU $ + (-$&0x0f)
catBuff EQU #6000 ;$ + (-$&0x0f)
ASSERT l2end < catBuff,"ERROR!!! Code leaks to catBuff"
EXPORT StartLineNum
EXPORT org_addr
;
;
/*
; device zxspectrum48
INCLUDE 'inc/rom_routines.inc'
INCLUDE 'Shared_Includes/constants/ZX_VARS.inc'
INCLUDE 'Shared_Includes/constants/zx_char_codes.inc'
;=======================================================================
collor_A EQU 0x03
collor_B EQU 0x02
collor_N EQU 0x04
collor_M EQU 0x08
collor_T EQU 0x07
org_addr EQU #5d3b
ORG org_addr
bstart: DW #100 ; line number = 1
DW l1end-l1begin ; line length
l1begin: DB ZX_Token.randomize,ZX_Token.usr,#30 ; 'rand' 'usr' 0
DB #0e,#00,#00 : DW start : DB #00,#0d ; start address
l1end: DW #200 ; line number = 2
DW l2end-l2begin ; line length
l2begin: DB #f9,#c0,#30 ; ':' 'rand' 'usr' 0
DB #0e,#00,#00 : DW 15619 : DB #00 ; start address
DB #3a,#ea,#3a,#f7,#22
filename: DB "boot ",#22,#3a ; ':' 'rem' run
;=======================================================================
;org #5d65
start: LD (memSP),SP
NewDisk: CALL clear_screen
; XOR A
; ;OUT (0xfe),A
; LD (ZX_VARS.ATTR_P),A
; LD (ZX_VARS.BORDER),A
; CALL BASIC_FN.x48.cls
;
LD BC,0x0905
LD DE,0
LD HL,catBuff
;.3 nop
CALL 0x3d13
LD A,"a"
LD (main.markPos),A
main: LD A,collor_T
LD (var_collor),A
LD HL,0x50cc
LD (var_printPos),HL
LD HL,catBuff+0x08f5
.p1: LD A,(HL)
PUSH HL
CALL printChar
POP HL
INC L
LD A,L
CP low (catBuff+0x08fd)
JR NZ,.p1
LD HL,0x4000
LD (var_printPos),HL
; ¢ëç¨â뢠­¨¥ ª â «®£ 
.buffPointer+1: LD HL,catBuff
.markPos+2: LD BC,"aa"
.l1: LD A,(HL)
DEC A
JR Z,.n1
;
JP M,keys
;
LD A,L
AND #F0
ADD A,8
LD L,A
LD A,(HL)
CP "B"
RES 3,L
JR NZ,.n1
; ¤¢¥ á¯¥æ ª­®¯ª¨
LD A,C ; C - ⥪ã騩 ä ©«
CP "y"
JP NC,PRINT_NEXT_BUTTONS ; "::PREV::" "::NEXT::"
;
; basic file
CP B ; ¢ë¡à ­­ë© ä ©«
LD A,collor_A
JR NZ,.s1
; ¢ë¤¥«¥­¨¥ ä ©«  ¨ ª®¯¨à®¢ ­¨¥ ¥£® ¢ áâப㠧 ¯ã᪠
XOR collor_M
;CALL choose_color
;JR C,.s1
;
LD DE,filename
PUSH BC
LD BC,8
LDIR
POP BC
RES 3,L
;
.s1: CALL prn_txt
.s3: INC C
.n1: LD A,L
AND #F0
LD L,A
LD DE,#10
ADD HL,DE
JR .l1
;
;
;
ALIGN #10
TXT_BUTTONS:
.prev: DB '<< PgDn '
.next: DB '>> PgUp '
;
;
keys: RES 5,(iy+1)
.w1: BIT 5,(iy+1)
JR Z,.w1
LD A,(iy-0x32)
;
CP B
JR Z,exit
CP 0x0d ; enter
JR Z,exit
CP " " ; space
JP Z,NewDisk
;
CP #04 ; pgUp
LD DE,-384
JR Z,.nxtPage
;
.pgdn: CP #05 ; pgDn
LD DE,384
JR Z,.nxtPage
;
.left: CP #08 ; left
JR NZ,.sl
DEC B
JR .c1
;
.sl: CP #0B ; up
JR NZ,.sd
DEC B
DEC B
DEC B
JR .c1
;
.sd: CP #0A ; down
JR NZ,.su
INC B
INC B
INC B
JR .c1
;
.su: CP #09 ; right
JR NZ,.sr
INC B
JR .c1
;
.sr: CP "a"
JR C,keys
CP C
JR NC,keys
LD B,A
;
.c1: LD A,B
CP "a"
JR NC,.sf1
LD A,"a"
.sf1: CP C
JR C,.sf2
LD A,C
DEC A
.sf2: LD (main.markPos),A
.toMain: JP main
; DE - +24 or -24
.nxtPage: LD HL,(main.buffPointer)
ADD HL,DE
BIT 3,H
JR NZ,keys
.EnablePages+1: AND 0
JR Z,keys
;
XOR A
LD (.EnablePages),A ; A=0 - Disable Pages
LD (main.buffPointer),HL
CALL clear_screen
JR .toMain
; var_files db 0
exit:
memSP+1: LD SP,0
RET
PRINT_NEXT_BUTTONS:
LD HL,#5040
LD (var_printPos),HL
LD A,collor_N
LD (keys.EnablePages),A ; A!=0 - Enable Pages
LD HL,TXT_BUTTONS.prev
CALL prn_txt
;
LD A,collor_N
INC C
CALL prn_txt
;
JP keys
printChar: LD H,A
ADD A,A
ADD A,A
ADD A,A
LD L,A
LD A,H
RLCA
RLCA
RLCA
AND 0x07
ADD A,0x3c
LD H,A
var_printPos+1: LD DE,0x4000
.l1: LD A,(HL)
RRCA
OR (HL)
INC HL
LD (DE),A
INC D
LD (DE),A
INC D
LD A,D
AND 0x07
JR NZ,.l1
LD A,D
SUB 0x08
LD D,A
LD A,E
ADD A,0x20
LD E,A
AND 0x20
JR NZ,.l1
LD HL,(var_printPos)
LD A,H
RRCA
RRCA
RRCA
ADD A,0x50
LD H,A
var_collor+1: LD A,0
LD (HL),A
SET 5,L
XOR collor_A ^ collor_B
LD (HL),A
;
LD HL,var_printPos
LD A,(HL)
ADD A,0x21
AND 0xdf
LD (HL),A
RET NZ
INC HL
LD A,(HL)
ADD A,0x08
LD (HL),A
RET
;
;
clear_screen: XOR A
OUT (0xfe),A
LD (ZX_VARS.ATTR_P),A
LD (ZX_VARS.BORDER),A
JP BASIC_FN.x48.cls
;
; A - current file
; choose_color: CP B ; ¢ë¡à ­­ë© ä ©«. #C7
; LD A,collor_A
; SCF
; RET NZ
; XOR collor_M
; RET
; A - COLOR
; C - char of text button
; HL - Text
prn_txt: LD (var_collor),A
LD A,C
PUSH HL
CALL printChar
LD A," "
CALL printChar
POP HL
;
.loop: LD A,(HL)
INC HL
PUSH HL
CALL printChar
POP HL
LD A,L
AND 0x07
JR NZ,.loop
;
LD A,(var_printPos)
AND 0x1f
RET Z
LD A," "
PUSH HL
CALL printChar
POP HL
RET
;
StartLineNum: DB 0
DW 0
;DB #80
l2end:
;bend:
DISPLAY "printChar ",/A,$-printChar
DISPLAY "code ",/A,$-start
;ds -$&0x0f
;ALIGN #10
;filename EQU $
catBuff EQU #6000 ;$ + (-$&0x0f)
ASSERT l2end < catBuff,"ERROR!!! Code leaks to catBuff"
EXPORT StartLineNum
EXPORT org_addr
;
*/

View File

@ -1,2 +1,2 @@
StartLineNum: EQU 0x00005EAA
StartLineNum: EQU 0x00005F30
org_addr: EQU 0x00005D3B