This commit is contained in:
Anatoliy Belyanskiy 2023-06-17 04:36:58 +10:00
parent 6e1d57accc
commit 51b40b7af5
29 changed files with 60405 additions and 0 deletions

4
.gitmodules vendored Normal file
View File

@ -0,0 +1,4 @@
[submodule "Shared_Includes"]
branch = main
path = Shared_Includes
url = https://github.com/Tolik-Trek/Shared_Includes.git

18709
SP_128.ASM Normal file

File diff suppressed because it is too large Load Diff

7034
SP_TRDOS.ASM Normal file

File diff suppressed because it is too large Load Diff

20413
SP__48.ASM Normal file

File diff suppressed because it is too large Load Diff

1
Shared_Includes Submodule

@ -0,0 +1 @@
Subproject commit 6e27011b6259b0256ce65d91a53ef1185223eafa

609
TRDOS/TR_MSD_2.ASZ Normal file
View File

@ -0,0 +1,609 @@
;
; for INCLUDE
; 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
;***********************************************
;
;***********************************************
MSDOS_1ST_FL:
PUSH DE
CALL READ_BPB
CALL READ_1ST_DIR
POP DE
MSDOS_TEST_FL:
PUSH DE
DI
IN A,(PAGE3)
LD E,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,E
LD E,(HL)
OUT (PAGE3),A
EI
LD A,E
POP DE
AND A
SCF
RET Z ; ŠŽ<C5A0> Š€’€‹Žƒ€
CP 0E5H
SCF
CCF
; DEC A ; <E28099>‰ ”€‰‹
; AND A
RET
;**********************************
MSDOS_NEXT_FL:
PUSH DE
LD DE,20H
ADD HL,DE
DI
IN A,(PAGE3)
LD D,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(COUNT_FL)
DEC A
LD (COUNT_FL),A
LD E,A
LD A,D
OUT (PAGE3),A
; RET_PAGE3
EI
LD A,E
POP DE
AND A ; <><E28098>Ž CF !!
JR NZ,MSDOS_TEST_FL
PUSH DE
DI
IN A,(PAGE3)
LD D,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(COUNT_SEC)
DEC A
LD (COUNT_SEC),A
LD E,A
LD A,D
OUT (PAGE3),A
; RET_PAGE3
EI
LD A,E
POP DE
AND A
SCF
RET Z
PUSH DE
CALL READ_NEXT_DIR
POP DE
LD HL,MS_DIR
JR MSDOS_TEST_FL
;**********************************
MSDOS_CAT:
PUSH DE
CALL AUTO_1D97 ; CLS
CALL OPEN_CH2
LD A,13
RST 10H
POP DE ; <E28098>ŽŠ€ <20>Ž… CAT
CAT_SPACES:
LD A,(DE)
CP 20H
JR NZ,CAT_NO_SPACE
INC DE
JR CAT_SPACES
CAT_NO_SPACE:
CP 13
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,FL_NAME
LD A,' '
RST 10H
LD A,' '
RST 10H
LD B,8
PRINT_MSD_L1:
LD A,(HL)
RST 10H
INC HL
DJNZ PRINT_MSD_L1
LD A,' '
RST 10H
LD B,3
PRINT_MSD_L2:
LD A,(HL)
RST 10H
INC HL
DJNZ PRINT_MSD_L2
LD A,6
RST 10H
POP DE
POP HL
RET
PRINT_MSD_DATS:
PUSH HL
PUSH DE
LD HL,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,(PAGE3)
LD C,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,C
LD DE,FL_NAME
LD BC,11
LDIR
LD BC,15
ADD HL,BC
LD BC,5
LDIR
LD L,(HL)
OUT (PAGE3),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,(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 13
JR Z,CMD_EXE1
CP 20H
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 (OPER_DISK),A
LD (CONT_DISK),A
LD B,A
LD A,(PDOS_COPY)
AND 7CH
OR B
LD (PDOS_COPY),A
OUT (P_DOS_FF),A
JP AUTO_03E1
END_TAB2:
SUB 4
CP RAMD_KEY_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
JP AUTO_03E4
;************************************
LOAD_RMD:
CALL RAMD_SYM ; ¯®«ãç¨âì ­®¬¥à RAM-Disk ¨§ (DE)
JP C,MSD_ERR
LOAD_RMD_XX:
LD (MED_START+1),A ; á®åà ­¨âì
CALL MSDOS_FIND_FILE
JP C,MSD_ERR
CALL RMD_BLKS_FL ; B - ç¨á«® ¡«®ª®¢ , DE -  ¡á®«îâ­ë© ᥪâ®à
LD A,(MED_START+1)
PUSH AF
CALL CLEAR_RMD_A ; ®á¢®¡®¤¨âì RAM-Disk A
POP AF
CALL GET_RMD_A ; ãáâ ­®¢¨âì RAM-Disk A à §¬¥à®¬ B
LD HL,0C000H
CALL MSDOS_READ_FILE
JP AUTO_03E1
SAVE_RMD:
CALL RAMD_SYM ; ¯®«ãç¨âì ­®¬¥à RAM-Disk ¨§ (DE)
JP C,MSD_ERR
LD (MED_START+1),A
CALL MSDOS_FIND_FILE
JP C,MSD_ERR
CALL RMD_BLKS_FL
LD A,(MED_START+1)
CALL TEST_RAMD ; ¯à®¢¥à¨âì ­ «¨ç¨¥ RAM-Disk A à §¬¥à®¬ B
JP C,MSD_ERR ; A - ­®¬¥à ¯¥à¢®£® ¡«®ª 
JP Z,MSD_ERR
LD HL,0C000H
CALL MSDOS_WRITE_FILE
JP AUTO_03E1
RMD_BLKS_FL:
LD A,(FL_SIZE+2)
PUSH HL
LD HL,(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
;****************************************
MSDOS_KOMP_FL: ; DE - ˆŒŸ ”€‰‹€ ‘Ž *,?
; HL - ˆŒŸ Š€’€‹Žƒ…
CALL COPY_NAME_MSD ; <20><EFBFBD>…Œ…ˆœ ˆŒŸ Ž<>œ TR-DOS
LD A,(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,FL_NAME
CALL MSDOS_KOMP_ALL
POP HL
POP DE
RET
MSDOS_KOMP_ALL:
LD A,(DE)
INC DE
CP 20H
JR Z,MSDOS_KOMP_ALL
CP 13
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 13
JR Z,KOMP_SPACING3
CP 20H
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 13
JR Z,KOMP_SPACING
CP 20H
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 223
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,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(MS_BPB+CLAST_SIZE)
EX DE,HL
LD BC,0
LD HL,0
LD IX,0
CALC_CL_LP:
ADD IX,DE
ADC HL,BC
DEC A
JR NZ,CALC_CL_LP
LD DE,(MSD_DAT_SEC)
LD BC,(MSD_DAT_SEC2)
ADD IX,DE
ADC HL,BC ; HL,IX - Œ…™…<E284A2>ˆ… Š<E28099>€ Ž’ <20>€—€€ „€<E2809E><E282AC>
EX AF,AF'
OUT (PAGE3),A
PUSH IX
EX (SP),HL
POP IX
EX DE,HL
EI
POP HL
POP BC
RET
HD_TX: DB ' ERR_HD',0A0H
HD_TX2: DB 'HDD not found',0A0H
MSG_3: DB 'ERROR...',0A0H
MSDOS_MSG: DB 'File not found...',0A0H
NO_MEMORY: DB 'No RAM-Disk MEM',0A0H
WORDS:
DB 5,'CLEAR' ; ®ç¨áâ¨âì RAM-Disk
DW CLEAR_RAMD_X
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 8,"SPRINTER"
DW SPR_1
DB 2,"AY"
DW AY8910
DB 0
;SAVE_AUTOEXEC:
; LD C,0FEH
; CALL EXP_FNS
; RET
AY8910:
LD A,0EAH
LD C,0F3H
CALL EXP_FNS
EI
CALL AUTO_1D97
AND A
RET
SPR_1:
LD A,(DE)
INC DE
CP 20H
JR Z,SPR_1
CP "1"
LD C,0F0H
JR Z,SP_1
CP "2"
SCF
RET NZ
LD C,0F1H
SP_1: LD A,(DE)
CP 21H
CCF
RET C
CALL EXP_FNS
EI
CALL AUTO_1D97
AND A
RET
;****************************************************
;*****************************************
; ERRORS
;*****************************************
; 0 - ƒ<E282AC>€Ÿ <20><>Ž<E2809A>Š€ <20><>Žƒ<C5BD>€ŒŒ
; 1 - <20><E2809A><E280A6>‰ ”Ž<E2809D>Œ€ ˆŒ…<C592>ˆ
; 2 - ŠŽ<C5A0> Š€’€‹Žƒ€
;

596
TRDOS/TR_MSD_3.ASZ Normal file
View File

@ -0,0 +1,596 @@
INIT_RMD:
LD C,9FH
CALL EXP_FNS
EI
RET
; DI
; LD C,PAGE3
; IN B,(C)
; LD A,SYS_PAGE
; OUT (C),A
; LD A,(0C000H)
; CPL
; LD (0C000H),A
; OUT (C),B
; EI
; CALL INIT_SYS_PAGE
; JP AUTO_03E1
;INIT_SYS_PAGE:
; LD C,97H
; CALL EXP_FNS
; EI
; RET
RAMD_FAT_PROG:
CALL AUTO_1D97 ; CLS
CALL OPEN_CH2
LD HL,RAMD_FAT
RAMD_F_L1:
DI
IN A,(PAGE3)
LD C,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,C
LD C,(HL)
OUT (PAGE3),A
; RET_PAGE3
EI
PUSH HL
LD A,C
CALL PRINT_HEX_A
POP HL
INC L
JR NZ,RAMD_F_L1
CALL OPEN_CH0
JP AUTO_03E1
;***************************************************************************
TB_ONOFF:
DEC DE
DEC DE
LD A,(DE)
CP 'F'
JR Z,TB_OFF_EXE
CP 'f'
JR Z,TB_OFF_EXE
TB_ON_EXE:
LD C,8Fh
LD A,4
JP EXP_FNS
TB_OFF_EXE:
LD C,8Fh
LD A,3
JP EXP_FNS
;
;***************************************************************************
;
; €«£®à¨â¬ ç⥭¨ï ä ©« 
;
;***************************************************************************
; ‚室 - ¤ ­­ë¥ ä ©«  ¢ ¯¥à¥¬¥­­ëå TR-DOS - ¤«¨­ ,áâ àâ®¢ë© ª« áâ¥à
;  ¤à¥á § £à㧪¨, ­ ç «ì­ë© ¡«®ª § £à㧪¨
; ¯à¥¤¢ à¨â¥«ì­®¥ §­ ç¥­¨¥ max2 - ¤«¨­  ¡«®ª , ä« £ ¡«®ª®¢®©
; § £à㧪¨
;***************************************************************************
MSDOS_WRITE_FILE:
LD (CONT_BUF_ADR),HL ;  ¤à¥á § £à㧪¨
LD (MED_START),A ; áâà ­¨æ  § £à㧪¨
LD A,6
JR MSDOS_R_W_FILE
;
MSDOS_READ_FILE:
LD (CONT_BUF_ADR),HL ;  ¤à¥á § £à㧪¨
LD (MED_START),A ; áâà ­¨æ  § £à㧪¨
LD A,5
MSDOS_R_W_FILE:
LD (MED_LEN),A
; beg=start_claster ; <20>®«ãç¨âì ­ ç «ì­ë© ª« áâ¥à
LD IX,(START_CLASTER) ; áâ àâ®¢ë© ª« áâ¥à
; next=beg
; max=file_len ; ¤«¨­  ¢ ª« áâ¥à å
CALL GET_FILE_CLASTERS_BC
; LD A,B
; CALL PRINT_HEX_A
; LD A,C
; CALL PRINT_HEX_A
msd_rf_cont2:
; max2=blk_len ; ¤«¨­  ¡«®ª  ¢ ª« áâ¥à å
; DI ; GET_BLK_CLASTERS_L
; IN A,(PAGE3)
; EX AF,AF'
; LD A,SYS_PAGE
; OUT (PAGE3),A
; LD A,(C_P_B)
; LD L,A
; EX AF,AF'
; OUT (PAGE3),A
; EI
LD L,128
msd_rf_cont1:
; num=0
PUSH IX
POP DE
LD A,0
;---------------------------------
msd_rf_cont:
; num=num+1
INC A
; if num=max then goto msd_rf_last_blk ; <20>஢¥à¨âì ç¨á«® ª« áâ¥à®¢,
CP C
JR NZ,msd_rf_l1
DEC B
INC B
JR Z,msd_rf_last_blk
msd_rf_l1:
; if num=max2 then goto msd_rf_blk ; <20>஢¥à¨âì ç¨á«® ª« áâ¥à®¢,
CP L
PUSH HL
PUSH BC
PUSH AF
JR Z,msd_rf_blk
; sec=next ; ç¨â ¥¬ëå §  ®¤¨­ à §
; next=FAT(sec) ; ‚ëç¨á«¨âì á«¥¤ãî騩 ª« áâ¥à
CALL FAT_DE_to_HL
; if next = end then goto msd_rf_last_blk ; ¯à®¢¥à¨âì ª®­¥æ
JR C,msd_rf_last_blk2
EX DE,HL
AND A
INC HL
; if next-sec = 1 then goto msd_rf_cont ; <20>஢¥à¨âì next
SBC HL,DE
JR NZ,msd_rf_blk2
POP AF
POP BC
POP HL
JR msd_rf_cont
;---------------------------------
msd_rf_blk:
CALL FAT_DE_to_HL
JR C,msd_rf_last_blk2
EX DE,HL
msd_rf_blk2:
; beg=next
; EX DE,IX
PUSH IX
PUSH DE
POP IX
POP DE
POP AF
PUSH AF
call READ_num_clasters_from_beg ; ç¨â âì á ª« áâ¥à  DE
POP AF
POP BC
POP HL
LD H,A
; max=max-num
LD A,C
SUB H
LD C,A
JR NC,msd_rf_l2
DEC B
msd_rf_l2:
; max2=max2-num ; ¡«®ª ®ª®­ç¥­ ?
LD A,L
SUB H
LD L,A
; if not max2=0 then goto msd_rf_cont1 ; ¥á«¨ ¤ ,á«¥¤ãî騩 ¡«®ª
JR NZ,msd_rf_cont1
; max2=blk_len ; ¤«¨­  ¡«®ª  ¢ ª« áâ¥à å ¤«ï ç⥭¨ï
JR msd_rf_cont2
;-------------------------------
msd_rf_last_blk2:
POP AF
POP BC
POP HL
msd_rf_last_blk:
; EX DE,IX
push de
push ix
pop de
pop ix
call READ_num_clasters_from_beg
RET
;=========================================
READ_num_clasters_from_beg:
PUSH IX
PUSH DE
CALL CLAST_TO_SEC
PUSH AF
LD A,(MED_LEN)
LD C,A
SUB 5
JR Z,CONT_XX1
DEC A
JR NZ,SKEEP_XX1
CONT_XX1:
POP AF
ADD A,A
INC A
LOOP_128:
PUSH AF
PUSH DE
PUSH IX
PUSH BC
LD HL,(CONT_BUF_ADR)
LD A,(MED_START)
CALL MSD_R_W_UT
LD (CONT_BUF_ADR),HL
LD (MED_START),A
POP BC
POP IX
POP DE
POP AF
LD H,0
LD L,B
AND A
ADC HL,DE
JR NC,NO_INC_IX
INC IX
NO_INC_IX:
EX DE,HL
LD B,128
DEC A
JR NZ,LOOP_128
POP DE
POP IX
RET
SKEEP_XX1:
POP AF
POP DE
POP IX
RET
;*****************************************
MADE_next_blk:
PUSH BC
LD C,95h
CALL EXP_FNS
POP BC
INC L ; SET ZF, if END BLK !!!
LD HL,0C000H
RET
;*****************************************
CLAST_TO_SEC:
PUSH AF
EX DE,HL
CALL CALC_CLAST
DI
IN A,(PAGE3)
LD B,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(MS_BPB+CLAST_SIZE)
LD C,A
LD A,B
OUT (PAGE3),A
EI
POP AF
PUSH HL
LD L,A
LD H,0
LD A,C
CLAST_TO_SEC_L:
RRA
JR C,CLAST_TO_SEC_L2
ADD HL,HL
JR CLAST_TO_SEC_L
CLAST_TO_SEC_L2:
LD B,L
LD A,H
POP HL
RET
FAT_DE_to_HL:
; LD H,D
; LD L,E
; INC HL
; AND A
; RET
PUSH AF
PUSH DE
PUSH BC
PUSH IX
DI
IN A,(PAGE3)
LD C,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,C
LD HL,(FAT_FLAG)
LD BC,(MS_BPB+SEC_SIZE) ; à §¬¥à ᥪâ®à 
OUT (PAGE3),A
EI
PUSH HL
LD A,H
AND 80H
LD C,A
LD H,D
LD L,E
ADD HL,DE
ADC A,C
JR NC,FAT_12_L1
ADD HL,DE
ADC A,C
FAT_12_L1:
ADD HL,DE
ADC A,C
RRA ; A,HL = FATx4..3/2
RR H
RR L
POP DE ; ¢®ááâ ­®¢¨âì ä« £¨ FAT ¢ DE
PUSH AF ; § ¯®¬­¨âì ä« £ ᬥ饭¨ï
; HL - ᬥ饭¨¥ ®â ­ ç «  FAT
; A,HL - ᬥ饭¨¥ ¢ FAT
PUSH HL
LD C,0
PUSH BC
FAT_DE_L1:
RR B
JR C,FAT_DE_L2
RRA
RR H
JR FAT_DE_L1
FAT_DE_L2:
LD A,H ; A - ᥪâ®à FAT
BIT 0,D
JR NZ,CALL_ALL
CP E ; ­®¬¥à à ­¥¥ áç¨â ­­®£® ᥪâ®à  FAT
CALL_ALL:
CALL NZ,READ_FAT_SEC ; ç¨â âì FAT ᥪâ®à ­®¬¥à A
POP BC ; ¢á¯®¬­¨âì à §¬¥à ᥪâ®à 
POP HL ; ¢á¯®¬­¨âì  ¤à¥á ¢ FAT
DEC BC
LD A,H
AND B
LD H,A
LD BC,MS_FAT
ADD HL,BC
DI
IN A,(PAGE3)
LD C,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,C
LD (FAT_FLAG),DE
LD C,(HL) ; áç¨â âì ª« áâ¥à
INC HL
LD B,(HL)
INC HL
OUT (PAGE3),A
; RET_PAGE3
EI
POP AF
JR NC,FAT_HALF
LD A,4
FAT_HALF_L:
RR B
RR C
DEC A
JR NZ,FAT_HALF_L
FAT_HALF:
BIT 7,D
LD A,0FFH
JR NZ,FAT_16_L2
LD A,0FH
AND B
LD B,A
LD A,0FH
FAT_16_L2:
CP B
JR NZ,NO_END_CLAST
FAT_ALL:
LD A,C
CP 0F0H
JR C,NO_END_CLAST
LD L,C
LD H,B
POP IX
POP BC
POP DE
POP AF
SCF
RET
BLOCK #09FF-$, #FF
BLOCK #0A01-$, #FF
NO_END_CLAST:
; PUSH AF
; LD A,B
; CALL PRINT_HEX_A
; LD A,C
; CALL PRINT_HEX_A
; POP AF
LD H,B
LD L,C
POP IX
POP BC
POP DE
POP AF
AND A
RET
ERROR_FAT:
LD HL,MSG_3 ; ERROR
JP AUTO_03E4
;**********************************************
READ_FAT_SEC:
PUSH IX
PUSH HL
PUSH BC
LD E,A
RES 0,D
PUSH DE
LD D,0
DI
IN A,(PAGE3)
LD L,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,L
LD IX,(MSD_FAT_SEC)
LD HL,(MSD_FAT_SEC2)
OUT (PAGE3),A
EI
LD BC,0
ADD IX,DE
ADC HL,BC
PUSH IX
POP DE
PUSH HL
POP IX
LD HL,(CONT_BUF_ADR)
LD A,(MED_START)
PUSH AF
PUSH HL
LD HL,MS_FAT
LD A,SYS_PAGE
LD B,2
LD C,5
CALL MSD_R_W_UT
POP HL
POP AF
LD (CONT_BUF_ADR),HL
LD (MED_START),A
POP DE
POP BC
POP HL
POP IX
RET
;**********************************************
;
; ‘ç¨â뢠­¨¥ FAT ¯® âਠᥪâ®à  ???
;
;**********************************************
GET_FILE_CLASTERS_BC:
DI
IN A,(PAGE3)
LD L,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,L
LD HL,(CLASTER_LEN)
OUT (PAGE3),A
; RET_PAGE3
EI
LD BC,(FL_SIZE)
LD A,(FL_SIZE+2)
LD DE,0
SCF
GET_FL_CL_2: ; ¢ëç¨á«¥­¨¥ ª®«¨ç¥á⢠ ª« áâ¥à®¢ ¢ ä ©«¥
RR H ; HL/2
RR L
JR C,GET_FL_L2 ; ¥á«¨ ¯¥à¢ë© ¡¨â = 1 - ¢ë©â¨ ¨§ 横« 
RRA ; file_len/2
RR B
RR C
JR NC,GET_FL_CL_2
LD E,1
JR GET_FL_CL_2
GET_FL_L2:
BIT 0,E
RET Z
INC BC
RET
;***************************************************************************
HDD_PROG:
LD C,0
CALL HD_CMD
JP C,HDD_PROG_E
LD HL,HD_IDF_ADR+54
LD B,32
HDD_PROG_L:
DI
IN A,(PAGE3)
LD D,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,L
XOR 1
LD L,A
LD C,(HL)
LD A,L
XOR 1
LD L,A
INC HL
LD A,D
OUT (PAGE3),A
; RET_PAGE3
EI
LD A,C
PUSH BC
RST 10H
POP BC
DJNZ HDD_PROG_L
LD C,1
CALL HD_CMD
JP NC,AUTO_03E1
HDD_ERROR:
CALL PRINT_HEX_A
LD HL,HD_TX
JP AUTO_03E4
; JP AUTO_03E1
HDD_PROG_E:
LD HL,HD_TX2
JP AUTO_03E4
;
;***************************************************************************

768
TRDOS/TR_MSD_S.ASZ Normal file
View File

@ -0,0 +1,768 @@
;
; for INCLUDE
; MS-DOS system
;
;********************************************
; MS-DOS utilites
;********************************************
;************************************************
;* <09>ணࠬ¬  ç⥭¨ï/§ ¯¨á¨ MS-DOS ¤¨áª®¢ *
;* 1. €¤à¥á ¡ãä¥à  - HL *
;* 2. <20>®¬¥à ᥪâ®à  - DE *
;* 3. —¨á«® ᥪâ®à®¢ - B *
;* 4. Š®¬ ­¤  - C *
;* 5. ‘âà ­¨æ  އ“ - A *
;************************************************
HDD_REDIR:
POP AF
CALL HD_CMD
RET NC
JP HDD_ERROR
MSD_R_W_UT:
PUSH AF
CALL DISK_REDIR
CP 40H
JR NC,HDD_REDIR
POP AF
EX AF,AF'
LD A,C
SUB 4
JR Z,MSD_cmd4
; JR Z,MSD_cmd4M
DEC A
JR Z,MSD_cmd5
; JR Z,MSD_cmd5M
DEC A
JR Z,MSD_cmd6
; JR Z,MSD_cmd6M
EX AF,AF'
RET
;MSD_cmd4M:
; LD DE,0
; LD IX,0
; LD B,1
;MSD_cmd5M:
; EX DE,HL
; PUSH IX
; EX (SP),HL
; POP IX
; LD C,12H
; LD A,(OPER_DISK)
; DI
; PUSH IY
; CALL HD_CMD
; POP IY
; EI
; PUSH IX
; EX (SP),HL
; POP IX
; EX DE,HL
; JP C,ERROR_MSDOS
; EX AF,AF'
; AND A
; RET
;
;MSD_cmd6M:
; EX DE,HL
; PUSH IX
; EX (SP),HL
; POP IX
; LD C,13H
; LD A,(OPER_DISK)
; DI
; PUSH IY
; CALL HD_CMD
; POP IY
; EI
; PUSH IX
; EX (SP),HL
; POP IX
; EX DE,HL
; JP C,ERROR_MSDOS
; EX AF,AF'
; AND A
; RET
;*************************************
MSD_cmd4:
PUSH HL
PUSH AF
CALL RESET_WG
POP AF
POP HL
LD B,1
LD DE,0
MSD_cmd5:
LD A,0
LD (RD_WR_COM),A
EX AF,AF'
JR MSD_RWU1
MSD_cmd6:
LD A,255
LD (RD_WR_COM),A
EX AF,AF'
JR MSD_RWU1
PREPARE1:
LD (MED_START),A
LD (CONT_BUF_ADR),HL
DI
IN A,(PAGE2)
LD C,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,(DS_1440-4000H)
AND BIT_MASK_1440
SET 0,A
LD (DS_1440-4000H),A
LD A,C
OUT (PAGE2),A
EI
CALL Z,RES_1440
CALL NZ,SET_1440
CALL CALC_SECTOR
LD (CONT_SEC),DE
LD A,(RD_WR_COM)
RET
MSD_RWU1:
PUSH BC
PUSH HL
CALL PREPARE1
; JR MSD_R_W_LOOP
MSD_R_W_LOOP:
POP HL
POP BC
LD A,(MED_START)
INC B
DEC B
LD DE,(CONT_SEC)
RET Z
DEC B
PUSH BC
PUSH HL
LD (CONT_BUF_ADR),HL
LD A,(CONT_SEC)
LD (SEC_NUM),A
LD A,(CONT_TRK)
CALL Global_trk
LD A,(RD_WR_COM)
OR A
PUSH AF
CALL Z,MSD_3F0E
POP AF
CALL NZ,MSD_3F0A
DI
IN A,(PAGE2)
LD C,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD DE,(MS_BPB+SEC_SIZE-4000h)
LD A,C
OUT (PAGE2),A
EI
POP HL
ADD HL,DE
LD A,H
OR L
JR NZ,MSD_NO_PAGE
DI
IN A,(PAGE2)
LD C,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,(MED_START)
LD HL,RAMD_FAT-4000H
LD L,A
LD L,(HL)
LD A,C
OUT (PAGE2),A
EI
LD A,L
LD HL,0C000H
LD (MED_START),A
MSD_NO_PAGE:
LD (CONT_BUF_ADR),HL
PUSH HL
DI
IN A,(PAGE2)
LD C,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,(DS_1440-4000H)
RES 0,A
LD (DS_1440-4000H),A
LD A,(MSD_SECS-4000h)
LD L,A
LD A,C
OUT (PAGE2),A
EI
LD A,L
LD HL,CONT_SEC
INC (HL)
CP (HL)
JP NZ,MSD_R_W_LOOP
LD (HL),0
LD HL,CONT_TRK
INC (HL)
JP MSD_R_W_LOOP
;*****************************************
;
;*****************************************
MSD_3F0A:
LD A,160
JR MSD_3F10
MSD_3F0E:
LD A,128
MSD_3F10:
LD (COMAND_WG),A
MSD_3F13:
LD D,5 ; —ˆ‘‹Ž <20>ŽŽ<E28099><EFBFBD>ˆ
MSD_3F15:
PUSH DE
PUSH IX
DI
IN A,(PAGE3)
EX AF,AF'
LD A,(MED_START)
OUT (PAGE3),A
AND A
JR Z,NO_OFF_SCR
LD A,0C0H
OUT (RGADR),A
NO_OFF_SCR:
LD IX,MSD_RET_ADR
LD A,(SEC_NUM)
INC A
OUT (WG_SEC),A
LD HL,(CONT_BUF_ADR)
LD C,127
LD A,(COMAND_WG)
OUT (WG_COM),A
CP 160
JP Z,MSD_3FBA ; ‡€<E280A1>ˆœ …ŠŽ<E28099>
JP MSD_3FD5 ; —<E28099>ˆ…ŠŽ<E28099>
MSD_RET_ADR:
LD A,0
OUT (RGADR),A
EX AF,AF'
OUT (PAGE3),A
POP IX
POP DE
EI
IN A,(WG_COM)
LD B,A
AND 127
RET Z
MSD_3F39:
LD HL,READ_ONLY_MSG
AND '@'
JR NZ,MSD_3F4B
LD A,B
AND 4
JR Z,MSD_3FA0 ; -> „<>“ƒ€Ÿ Ž˜ˆ<CB9C>Š€
DEC D ; <20>Ž<E28099>Ÿ „€<E2809E><E282AC>
JR Z,MSD_3F48 ; MSD_3F15
CALL SWITCH_DT
JR MSD_3F15
MSD_3F48:
LD HL,DISK_ERROR_MSG
MSD_3F4B:
LD A,208
OUT (WG_COM),A
LD A,B
AND 1
JP NZ,AUTO_3EE7
PUSH HL
CALL AUTO_1D97
POP HL
RST PRINT_LN
LD HL,AUTO_2A13
RST PRINT_LN
IN A,(WG_TRK)
CALL AUTO_1DA3
LD HL,AUTO_2A18
RST PRINT_LN
IN A,(WG_SEC)
CALL AUTO_1DA3
LD HL,AUTO_29FE
RST PRINT_LN
MSD_3F7B:
CALL AUTO_1052
CP 'I'
RET Z
CP 'R'
JR Z,MSD_3F94
CP 'A'
JR NZ,MSD_3F7B
CALL exit_No_disk
LD A,7
LD (DOS_ERR_2),A
JP AUTO_01D3
MSD_3F94:
LD A,(CONT_TRK)
CALL Global_trk
CALL pause_750ms
JP MSD_3F13
MSD_3FA0:
DEC D
JP Z,MSD_3F48
CALL SWITCH_DT
PUSH DE
CALL AUTO_3D98 ; RESET_WG
LD A,(CONT_TRK)
CALL Global_trk ; <20>އˆˆŽ<CB86>ˆ<EFBFBD>Ž<E2809A>ˆ
POP DE
JP MSD_3F15
SWITCH_DT:
DI
IN A,(PAGE2)
LD C,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,(DS_1440-4000H)
BIT 0,A
JR Z,NO_SW_DT
XOR BIT_MASK_1440
LD (DS_1440-4000H),A
AND BIT_MASK_1440
LD A,C
OUT (PAGE2),A
EI
CALL Z,RES_1440
CALL NZ,SET_1440
RET
NO_SW_DT:
LD A,C
OUT (PAGE2),A
EI
RET
;******************************************
; Sector Write !!!
;******************************************
MSD_3FBA:
LD B,4
MSD_3FBC:
IN A,(P_DOS_FF)
AND 192
JR NZ,MSD_3FD1
INC DE
LD A,E
OR D
JR NZ,MSD_3FBC
DJNZ MSD_3FBC
MSD_RET_IX:
JP (IX)
MSD_3FCA:
IN A,(P_DOS_FF)
AND 192
JR Z,MSD_3FCA
JP M,MSD_RET_IX
MSD_3FD1:
OUTI
JR MSD_3FCA
;******************************************
; Sector Read !!!
;******************************************
MSD_3FD5:
LD B,4
MSD_3FD7:
IN A,(P_DOS_FF)
AND 192
JR NZ,MSD_3FEC
INC DE
LD A,E
OR D
JR NZ,MSD_3FD7
DJNZ MSD_3FD7
MSD_RET_IX2:
JP (IX)
MSD_3FE5:
IN A,(P_DOS_FF)
AND 192
JR Z,MSD_3FE5
JP M,MSD_RET_IX2
MSD_3FEC:
INI
JR MSD_3FE5
;******************************************
;****************************************
RES_1440:
LD A,01h
OUT (0BDh),A
RET
SET_1440:
LD A,21h
OUT (0BDh),A
RET
READ_BPB:
CALL DISK_REDIR
CP 40H
JR NC,HDD_REDIR2
CP 4
JP NC,ERROR_MSDOS
CALL SET_DISK
CALL MAIN_BPB
RET NC
JP ERROR_MSDOS
HDD_REDIR2:
CALL MAIN_BPB
RET NC
SPACIAL_BPB:
LD IX,0
LD DE,63
LD A,SYS_PAGE
LD HL,MS_BPB
LD C,5
LD B,1
CALL MSD_R_W_UT
CALL BPB_PARAMS
RET NC
JP ERROR_MSDOS
MAIN_BPB:
LD IX,0
LD DE,0
LD A,SYS_PAGE
LD HL,MS_BPB
LD C,4
LD B,1
CALL MSD_R_W_UT
CALL BPB_PARAMS
RET
; LD C,18H
; LD A,(OPER_DISK)
; CALL HD_CMD
; DI
; IN A,(PAGE3)
; EX AF,AF'
; LD A,SYS_PAGE
; OUT (PAGE3),A
;
; LD A,(MS_BPB+S_P_T) ; Š®«¨ç¥á⢮ ᥪâ®à®¢ ­  â४
; LD L,A
;
; EX AF,AF'
; OUT (PAGE3),A
; EI
;
; LD A,(OPER_DISK)
; LD C,19H
; CALL HD_CMD
BPB_PARAMS:
DI
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(MS_BPB+FORM_CODE)
CP 0F0H
JP C,ERROR_BPB
LD HL,MS_BPB+FAT_ID
LD DE,FAT1_MSG
LD B,4
R_BPB_L1:
LD A,(DE)
CP ' '
JR NZ,R_BPB_L11
INC DE
JR R_BPB_L1
R_BPB_L11:
CP (HL)
JR NZ,PC_DOS_BPB
INC HL
INC DE
DJNZ R_BPB_L1
LD A,(HL)
CP '6'
LD HL,81FFH ; FAT16 ä« £
JR Z,BPB_FAT
CP '2'
JP NZ,ERROR_BPB
PC_DOS_BPB:
LD HL,01FFH ; FAT12 ä« £
BPB_FAT:
LD (FAT_FLAG),HL
LD A,(MS_BPB+S_P_T) ; Š®«¨ç¥á⢮ ᥪâ®à®¢ ­  â४
LD (MSD_SECS),A
BIT 7,H
LD IX,0
LD HL,0 ; ¢ëç¨á«¨âì ­ ç «ì­ë© ᥪâ®à FAT
JR Z,NO_LD_SPECIAL
LD IX,(MS_BPB+SPECIAL_SECS)
LD HL,(MS_BPB+SPECIAL_SECS+2)
NO_LD_SPECIAL:
LD BC,0
LD DE,(MS_BPB+RESERV_SECS)
ADD IX,DE
ADC HL,BC
LD (MSD_FAT_SEC),IX ; ­ ç «ì­ë© ᥪâ®à FAT
LD (MSD_FAT_SEC2),HL ; ­ ç «ì­ë© ᥪâ®à FAT
LD DE,(MS_BPB+S_P_F) ; ç¨á«® ᥪâ®à®¢ ¢ FAT
LD BC,0
LD A,(MS_BPB+FATS_NUM) ; ª®«¨ç¥á⢮ FATs
NEXT_ADD:
ADD IX,DE
ADC HL,BC
DEC A
JR NZ,NEXT_ADD
LD (MSD_CAT_SEC),IX ; ­ ç «ì­ë© ᥪâ®à DIR
LD (MSD_CAT_SEC2),HL ; ­ ç «ì­ë© ᥪâ®à DIR
LD BC,(MS_BPB+SEC_SIZE) ; <20> §¬¥à ᥪâ®à 
RL C
RL B
RL C
RL B
RL C
RL B
LD C,B
LD B,0 ; BC - ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
LD A,C
LD (F_P_S),A
LD DE,(MS_BPB+FLS_NUM) ; —¨á«® ä ©«®¢ëå § ¯¨á¥©
EX DE,HL
DEC HL
XOR A
NEXT_ADD2:
INC A
JR Z,ERROR_BPB
SBC HL,BC
JR NC,NEXT_ADD2
EX DE,HL
LD E,A ; A - ç¨á«® ᥪâ®à®¢ ¢ DIR
LD D,0
LD BC,0
LD (S_P_C),A
ADD IX,DE ; <20> ç «® DATA area
ADC HL,BC
LD (MSD_DAT_SEC),IX
LD (MSD_DAT_SEC2),HL
LD BC,(MS_BPB+SEC_SIZE) ; <20> §¬¥à ᥪâ®à 
LD HL,0
LD A,(MS_BPB+CLAST_SIZE)
LD D,A
LD A,0
NEXT_ADD3:
ADD HL,BC ; ‚ëç¨á«¥­¨¥ ¤«¨­ë ª« áâ¥à 
ADC A,0
DEC D
JR NZ,NEXT_ADD3
LD (CLASTER_LEN),HL
LD B,0
LD C,A
LD (CLASTER_LEN2),BC
LD HL,0
LD BC,(MS_BPB+S_P_T)
LD A,(MS_BPB+H_P_S)
BPB_L1: ; ‚›—ˆ‘‹ˆ’œ ŠŽ‹ˆ—…‘’‚Ž …ŠŽ<E28099>Ž <20>ˆˆ<E280B9><EFBFBD>
ADD HL,BC
DEC A
JR NZ,BPB_L1
LD (S_X_H),HL
EX AF,AF'
OUT (PAGE3),A
EI
AND A
RET
ERROR_BPB:
EX AF,AF'
OUT (PAGE3),A
SCF
EI
RET
ERROR_MSDOS:
LD HL,MSG_3
JP AUTO_03E4
FAT1_MSG: DB 'FAT1'
;********************************************
READ_NEXT_DIR:
DI
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD DE,(MSD_CONT_SEC)
LD IX,(MSD_CONT_SEC2)
JR READ_NEXT2
;********************************************
READ_1ST_DIR:
DI
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD IX,(MSD_CAT_SEC2) ;
LD DE,(MSD_CAT_SEC) ; <20>€—€œ<E280B9>…ŠŽ<E28099> Š€’€‹Žƒ€
LD (MSD_CONT_SEC),DE
LD (MSD_CONT_SEC2),IX
LD A,(S_P_C) ; …ŠŽ<E28099>Ž Š€’€‹Žƒ…
LD (COUNT_SEC),A
READ_NEXT2:
EX AF,AF'
OUT (PAGE3),A
; RET_PAGE3
EI
LD HL,MS_DIR
LD A,SYS_PAGE
LD B,1
LD C,5
CALL MSD_R_W_UT
DI
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD DE,(MSD_CONT_SEC)
INC DE
LD (MSD_CONT_SEC),DE
LD A,D
OR E
JR NZ,READ_NEXT3
LD IX,(MSD_CONT_SEC2)
INC IX
LD (MSD_CONT_SEC2),IX
READ_NEXT3:
LD A,(F_P_S) ; ”€‰‹Ž‚ …ŠŽ<E28099>
LD (COUNT_FL),A
EX AF,AF'
OUT (PAGE3),A
; RET_PAGE3
EI
LD HL,MS_DIR
AND A
RET
;******************************************
;********************************************
CALC_SECTOR: ; ‚›—ˆ‘‹ˆ’œ <>…Š/…ŠŽ<E28099> ¤«ï ¤¨áª¥â
LD A,D ; DE -  ¡á. ­®¬¥à ᥪâ®à 
OR E
JR NZ,CALC_SECT_L1
LD HL,0
RET
CALC_SECT_L1:
PUSH BC
EX DE,HL
DI
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD BC,(MS_BPB+S_P_T)
XOR A
LOOP_TRK:
SBC HL,BC
JR C,SEC_ENDER
INC A
JR NZ,LOOP_TRK
POP BC
JP ERROR_BPB
SEC_ENDER:
ADD HL,BC
LD H,A ; <>…Š
; LD L,L ; …ŠŽ<E28099>
EX AF,AF'
OUT (PAGE3),A
EI
EX DE,HL
POP BC
RET
;************************************************
REDIR_LINE_CODING:
LD (MED_START),HL
LD HL,(DOS_CH_ADR)
LD A,(HL)
CP '/'
RET Z
JP AUTO_3057
PRINT_HEX_A:
PUSH AF
RRCA
RRCA
RRCA
RRCA
CALL PRINT_HEX_SYM
POP AF
PRINT_HEX_SYM:
PUSH HL
PUSH DE
PUSH BC
AND 0FH
ADD A,'0'
CP '9'+1
JR C,NO_ADD
ADD A,7
NO_ADD:
RST 10H
POP BC
POP DE
POP HL
RET
;*******************************************

480
TRDOS/TR_RMD_S.ASZ Normal file
View File

@ -0,0 +1,480 @@
DISK_REDIR:
PUSH HL
PUSH BC
LD A,(OPER_DISK)
AND 3
LD C,0CFH
CALL EXP_FNS
EI
POP BC
POP HL
RET
R_W_REDIR:
CALL DISK_REDIR
CP 4
JR C,RECALL_1E70
CP 20
JR C,RECALL_RAMD
ERROR_DISK:
JP AUTO_3EE7 ; ¯¥à¥å®¤ ­  ®è¨¡ªã ¤¨áª 
RECALL_1E70:
CALL RES_1440
LD A,(RD_WR_COM)
PUSH BC
PUSH HL
CALL READ_TRK_NUM
JP AUTO_1E70
RECALL_RAMD:
SUB 4
CALL TEST_RAMD
JR C,ERROR_DISK
SCF
JR Z,ERROR_DISK
JP READ_WRITE_RAMD
RECALL_MSD:
JR ERROR_DISK ; ¯¥à¥å®¤ ­  ®è¨¡ªã ¤¨áª 
TEST_RAMD:
PUSH HL
LD C,0CEH
CALL EXP_FNS
EI
POP HL
RET
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; º RD/WR SECTOR HL - BUFER º\
; º CONT_SEC - SEC/TRK FOR READ/WRITE º\
; º COM_RD_WR - ª®¬ ­¤  ç⥭¨¥/§ ¯¨áì º\
; º 0 - ç⥭¨¥, 255 - § ¯¨áì º\
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
READ_WRITE_RAMD:
;
; CALL DISK_REDIR
; SUB 4
; RET C
; CP 16
; CCF
; RET C
;
; PUSH HL
; LD HL,RAMD_KEYS
; ADD A,L
; LD L,A
; IN A,(PAGE3)
; LD C,A
; LD A,SYS_PAGE
; DI
; OUT (PAGE3),A
; LD L,(HL)
; LD A,C
; OUT (PAGE3),A
; EI
; LD A,L ; 1-st block
; POP HL
;
; AND A
; SCF
; RET Z
; EX AF,AF'
;
; IN A,(RGADR)
; PUSH AF
;
; PUSH HL
; PUSH DE
; PUSH BC
;
; LD DE,(CONT_SEC)
; LD A,D ; ”ˆ‡ˆ—…‘Šˆ… -> ‹Žƒˆ—…‘Šˆ… !!!
; RRCA
; RRCA
; RRCA
; RRCA
; LD D,A
; AND 0F0H
; OR E
; LD E,A
; LD A,D
; AND 0FH
; LD D,A
;
; LD A,(RD_WR_COM)
; AND A
; JR Z,RAMD_READ
; PUSH AF
; LD A,0C0H
; OUT (RGADR),A
; POP AF
;RAMD_READ:
;
; POP BC
; PUSH BC
; LD C,0C8H
; DI
; EX AF,AF'
; CALL EXP_FNS ; ç⥭¨¥/§ ¯¨áì RAM-Disk
; EI
; POP BC
; POP DE
; POP HL
; POP AF
; OUT (RGADR),A
; LD DE,(CONT_SEC)
;
; LD A,B
;
;RAMD_TRK_CONT:
; SUB 16
; JR C,RAMD_NO_TRK
; INC D
; JR RAMD_TRK_CONT
;
;RAMD_NO_TRK:
; ADD A,16
; ADD A,E
; CP 16
; JR C,RAMD_NO_TRK1
; SUB 16
; INC D
;RAMD_NO_TRK1:
; LD E,A
;
; LD A,H
; ADD A,B
; LD H,A
;
; LD B,0
;
; LD (CONT_SEC),DE
; AND A
; RET
;
;
INC B
WD_WR_RAMD_LOOP:
DEC B
RET Z
PUSH BC
PUSH HL
CALL RD_WR_1SEC
POP HL
CALL RAMD_NEXT_SEC
POP BC
JR WD_WR_RAMD_LOOP
RAMD_NEXT_SEC:
PUSH HL
LD HL,CONT_SEC
LD A,16
INC (HL)
CP (HL)
JR NZ,RAMD_NEXT_1
LD (HL),0
INC HL
INC (HL)
RAMD_NEXT_1:
POP HL
LD BC,0100h
ADD HL,BC
RET
RD_WR_1SEC:
LD DE,(CONT_SEC)
CALL PAGE_CALC2
DI
LD A,(RD_WR_COM)
AND 0C0H
OUT (RGADR),A
LD A,H
CP 0A0H
LD A,(RD_WR_COM)
LD E,0
LD D,C
SET 6,D
JR C,RD_WR_C000
RD_WR_4000:
RES 7,D ; DE -  ¤à¥á ¤ ­­ëå RAMD
LD C,PAGE1
EX AF,AF'
IN A,(C)
EX AF,AF'
OUT (C),B
;****** <20><EFBFBD>…Œ…™…<E284A2>ˆ… „€<E2809E><E282AC>• *****
LD BC,100H
AND A
JR NZ,MOVE_NOT_EX3
EX DE,HL
MOVE_NOT_EX3:
LDIR ; à ¡®â âì §¤¥áì ¦¥, ¢ TR-DOS !!!
AND A
JR NZ,MOVE_NOT_EX4
EX DE,HL
MOVE_NOT_EX4:
;*******************************
EX AF,AF'
OUT (PAGE1),A
EX AF,AF'
; RET_PAGE1
MOVE_RET:
LD A,0
OUT (RGADR),A
EI
RET
RD_WR_C000:
SET 7,D
LD C,PAGE3
EX AF,AF'
IN A,(C)
EX AF,AF'
OUT (C),B
;****** <20><EFBFBD>…Œ…™…<E284A2>ˆ… „€<E2809E><E282AC>• *****
LD BC,100H
AND A
JR NZ,MOVE_NOT_EX1
EX DE,HL
MOVE_NOT_EX1:
LDIR ; à ¡®â âì §¤¥áì ¦¥, ¢ TR-DOS !!!
AND A
JR NZ,MOVE_NOT_EX2
EX DE,HL
MOVE_NOT_EX2:
;*******************************
EX AF,AF'
OUT (PAGE3),A
EX AF,AF'
; RET_PAGE3
JR MOVE_RET
;**********************************************
PAGE_CALC2:
LD A,D ; ”ˆ‡ˆ—…‘Šˆ… -> ‹Žƒˆ—…‘Šˆ… !!!
RRCA
RRCA
RRCA
RRCA
LD D,A
AND 0F0H
OR E
LD E,A
LD A,D
AND 0FH
LD D,A
PUSH HL
LD C,98h
CALL DISK_REDIR
SUB 4
CALL EXP_FNS ; ¢ëç¨á«¥­¨¥  ¤à¥á  ¨ áâà ­¨æë RAM-Disk
EI
LD B,A
LD C,H
POP HL
EI
RET NC
JP ERROR_DISK
;*********************************************
RAMD_X12: ; ¯à®¢¥àª  ¤¨áª 
LD (OPER_DISK),A
CALL DISK_REDIR
CP 4
JR C,X_AUTO_3DCE
CP 20
RET C
; JR C,RAMD_TEST
NO_DISK2:
JP AUTO_3EE7 ; NO_DISK
X_AUTO_3DCE:
CALL RES_1440
LD A,(OPER_DISK)
JP AUTO_3DCE
;*************************************
RAMD_X14: ; FORMATING
CALL get_disk_type
PUSH AF
PUSH BC
PUSH HL
CALL DISK_REDIR
CP 4
JR C,DISK_FORM
CP 20
JR C,RAMD_FORMAT
JP READ_ONLY
DISK_FORM:
LD A,(MED_START+1)
CP 14H
JR Z,QVICK_FORMAT
POP HL
POP BC
POP AF
JP AUTO_1EE0
QVICK_FORMAT:
POP HL
POP BC
POP AF
JR Q_FORM_1
RAMD_FORMAT:
SUB 4
CALL TEST_RAMD
JP C,READ_ONLY
CALL NZ,CLEAR_RAMD
POP HL
POP BC
POP AF
LD B,28H ; à §¬¥à 640K
CALL DISK_REDIR
SUB 4
CALL GET_RAM_BLK ; „…<E280B9>ˆ<20>€ŒŸˆ
; LD C,A ; Š‹ž— RAM-Disk
Q_FORM_1:
LD HL,BUFER ; CLEAR DISK BUFER
LD DE,BUFER+1
LD BC,0FFh
LD (HL),0
LDIR
LD DE,0
RAMD_F_LOOP:
LD HL,BUFER
LD B,1
PUSH DE
CALL WRITE_DISK
POP DE
INC E
LD A,E
CP 8
JR NZ,RAMD_F_LOOP
LD HL,2544
LD A,22
JP AUTO_1F55
;*************************************
CLEAR_RAMD_X:
CALL RAMD_SYM
JR NC,CLEAR_RMD_A
DEC DE
LD A,(DE)
CP 13
SCF
RET NZ
CLEAR_RAMD:
CALL DISK_REDIR
CLEAR_NEXT:
SUB 4
RET C
CP RAMD_KEY_NUM
CCF
RET C
CLEAR_RMD_A:
PUSH HL
PUSH DE
PUSH BC
LD C,93h ; ®ç¨á⪠ RAM-Disk
CALL EXP_FNS ; ¢ë§¢ âì äã­ªæ¨î
EI
POP BC
POP DE
POP HL
RET
;*********************************************************
GET_RMD_A:
GET_RAM_BLK: ; B - —ˆ‘‹Ž <><EFBFBD>“…Œ<20>ŽŠŽ, A - Š‹ž— RAM-Disk
LD C,92h
CALL EXP_FNS ; A,L - Š‹ž— RAM-Disk - ­®¬¥à ¯¥à¢®£® ¡«®ª 
EI
RET NC
NO_MEM:
LD HL,NO_MEMORY
JP ERR_EXIT
;*********************************************************
READ_ONLY:
LD HL,READ_ONLY_MSG ; Read only !!
JP ERR_EXIT
FDD_SET:
LD A,(OPER_DISK)
LD B,A
LD C,0CCH
CALL EXP_FNS
EI
RET
HDD_SET:
LD C,0
CALL HD_CMD
JP C,HDD_PROG_E
LD A,(OPER_DISK)
LD B,A
LD A,0
LD C,0CDH
CALL EXP_FNS
EI
RET
RAMD_SET:
CALL RAMD_SYM
RET C
RAMD_SET1:
PUSH AF
LD A,(OPER_DISK)
LD B,A
POP AF
LD C,0CBH
CALL EXP_FNS
EI
RET
RAMD_SYM:
LD A,(DE)
INC DE
CP 20H
JR Z,RAMD_SYM
AND 223
CP 'E'
RET C
SUB 'E'
CP 16
CCF
RET C
PUSH AF
LD A,(DE)
CP ':'
INC DE
JR Z,RAMD_SYM_OK
DEC DE
CP 21H
JR C,RAMD_SYM_OK
POP AF
SCF
RET
RAMD_SYM_OK:
POP AF
RET

1743
ZX_EXP.ASM Normal file

File diff suppressed because it is too large Load Diff

452
ZX_EXP/EXP_DCP2.ASM Normal file
View File

@ -0,0 +1,452 @@
DCP_INIT:
EXX
LD HL,ALTERA
LD DE,0C000H
DCP_L0:
LD B,8
LD C,(HL)
INC HL
DCP_L1:
RLC C
JR C,DCP_L2
LD A,0
LD (DE),A
INC DE
DJNZ DCP_L1
JR DCP_L3
DCP_L2:
LD A,(HL)
INC HL
LD (DE),A
INC DE
DJNZ DCP_L1
DCP_L3:
inc d
dec d
JR NZ,DCP_L0
IN A,(PAGE3)
EXX
JP (HL)
; RET
;***********************************
;DCP_INIT_new:
; DB 0DDH
; LD C,L
;; LD C,A
; DB 0DDH
; LD B,H
;; LD B,A
; DB 0FDH
; LD E,L
;; LD E,A
; DB 0FDH
; LD D,H
;; LD D,A
; EXX
;
; LD HL,0C000h
; LD DE,0C001h
; LD BC,3FFFH
; LD (HL),L
; LDIR
;
; LD IY,DCP_DATA_NEW
; LD IX,DCP_INN_RET
;
;DCP_INN_LOOP:
; LD L,(IY)
; LD H,(IY+1)
; LD E,(IY+2)
; LD D,(IY+3)
; LD B,(IY+4)
; JR DCP_FN0M
;
;DCP_INN_RET:
; LD BC,5
; ADD IY,BC
; LD A,(IY+2)
; OR (IY+3)
; JR NZ,DCP_INN_LOOP
;
; EXX
;; LD A,C
; DB 0DDH
; LD L,C
;; LD B,A
; DB 0DDH
; LD H,B
;; LD A,E
; DB 0FDH
; LD L,E
;; LD A,D
; DB 0FDH
; LD H,D
; JP (HL)
;; RET
;
;
; ”ã­ªæ¨ï ¤¥è¨äà â®à  ¯®à⮢.
; HL -  ¤à¥á
; DE - ¬ áª  - 0 ¨§¬¥­ï¥¬ë¥ ¡¨âë, 1 ­¥¨§¬¥­ï¥¬ë¥
; B - ¯®àâ
DCP_FN0M:
LD A,L
AND E
LD L,A
LD A,H
AND D
; AND 3FH
OR 0C0H
LD H,A
LD A,D
OR 0C0H
LD D,A
DCP_FN0_L1:
LD (HL),B
LD A,L ; § ¬ áª¨à®¢ âì ­¥¨§¬¥­ï¥¬ë¥ ¡¨âë 1-¬¨
OR E ; ¤«ï ¯à®å®¦¤¥­¨ï ¯¥à¥­®á 
INC A ; 㢥«¨ç¨âì  ¤à¥á
JR Z,DCP_FN0_L2 ; ¢®§­¨ª ¯¥à¥­®á
OR E
XOR E ; ®¡­ã«¨âì ­¥¨§¬¥­ï¥¬ë¥ ¡¨âë
LD C,A ; ¨§¬¥­ï¥¬ ï ç áâì
LD A,L
AND E ; ¢ë¤¥«¨âì ­¥¨§¬¥­ï¥¬ãî
OR C
LD L,A ; ¤®¡ ¢¨âì ¨§¬¥­ï¥¬ãî ç áâì
JR DCP_FN0_L1 ; 横«
DCP_FN0_L2: ; A = 0
; OR E
; XOR E
; LD C,A
LD A,L ; § ¡¨âì ¨§¬¥­ï¥¬ë¥ ¡¨âë ­ã«ï¬¨
AND E
; OR C
LD L,A
LD A,H ; § ¬ áª¨à®¢ âì ­¥¨§¬¥­ï¥¬ë¥ ¡¨âë 1-¬¨
OR D ; ¤«ï ¯à®å®¦¤¥­¨ï ¯¥à¥­®á 
INC A ; 㢥«¨ç¨âì  ¤à¥á
JR Z,DCP_FN0_L3
OR D
XOR D
LD C,A ; ¨§¬¥­ï¥¬ ï ç áâì
LD A,H
AND D ; ¢ë¤¥«¨âì ­¥¨§¬¥­ï¥¬ãî
OR C
LD H,A ; ¤®¡ ¢¨âì ¨§¬¥­ï¥¬ãî ç áâì
JR DCP_FN0_L1
DCP_FN0_L3:
JP (IX)
;DCP_DATA_NEW:
;; DATA FOR DCP
;; CCED/AAAAAAAAA DATA
;; NN1OW116517210
;; FF2SR54 3
;; 108
;;
;; Border ....0..11.1110 0C2H
; DW 00000001101110B
; DW 00001001101111B
; DB 0C2H
;; Keyboard ....1..11.1110 040H
; DW 00001001101110B
; DW 00001001101111B
; DB 040H
;; Kempston ...11..00.0111 015H
; DW 00011000000111B
; DW 00011001101111B
; DB 015H
;;
;; DRQ/INTRQ ...01..11.1111 015H
; DW 00001001101111B
; DW 00011001101111B
; DB 015H
;; WR_PDOS ...00..11.1111 014H
; DW 00000001101111B
; DW 00011001101111B
; DB 014H
;; CS_WG93_1F ...0...00.0111 010H
; DW 00000000000111B
; DW 00010001101111B
; DB 010H
;; CS_WG93_3F ...0...01.0111 011H
; DW 00000000100111B
; DW 00010001101111B
; DB 011H
;; CS_WG93_5F ...0...10.0111 012H
; DW 00000001000111B
; DW 00010001101111B
; DB 012H
;; CS_WG93_7F ...0...11.0111 013H
; DW 00000001100111B
; DW 00010001101111B
; DB 013H
;;
;; CNF_PORT ........1.0100 0C6H
; DW 00000000100100B
; DW 00000000101111B
; DB 0C6H
;;
;; SOUND_BFFD_WR ....0101111101 091H
; DW 00000101111101B
; DW 00001111111111B
; DB 091H
;; SOUND_FFFD_WR ....0111111101 090H
; DW 00000111111101B
; DW 00001111111111B
; DB 090H
;; SOUND_FFFD_RD ....11.1111101 000H
; DW 00001101111101B
; DW 00001101111111B
; DB 0
;;
;; COVOX_4F ...10.....0111 088H
; DW 00010000000111B
; DW 00011000001111B
; DB 088H
;; COVOX_FB ...10..11.1011 088H
; DW 00010001101011B
; DW 00011001101111B
; DB 088H
;; CASH__FB ...11..11..011 088H
; DW 00011001100011B
; DW 00011001100111B
; DB 088H
;; CASH__80 ...11..00.1000 088H
; DW 00011000001000B
; DW 00011001101111B
; DW 088H
;;
;; P_XTR ...1...01.1.11 032H
; DW 00010000101011B
; DW 00010001101011B
; DB 032H
;;
;; SC_256_1FFDH 0....001101101 0C0H
; DW 00000001101101B
; DW 10000111111111B
; DB 0C0H
;; ZX_128_7FFDH 0.0..0111.1101 0C1H
; DW 00000011101101B
; DW 10100111101111B
; DB 0C1H
;; ZX_128_7FFDH 0..0.0111.1101 0C1H
; DW 00000011101101B
; DW 10010111101111B
; DB 0C1H
;
;; ZX_128_7FFDH 100..0.11.1101 0C1H
; DW 10000001101101B
; DW 11100101101111B
; DB 0C1H
;; ZX_128_7FFDH 10.0.0.11.1101 0C1H
; DW 10000001101101B
; DW 11010101101111B
; DB 0C1H
;
;; SC_256_1FFDH 11...001101101 0C0H
; DW 11000001101101B
; DW 11000111111111B
; DB 0C0H
;; ZX_128_7FFDH 110..0111.1101 0C1H
; DW 11000011101101B
; DW 11100111101111B
; DB 0C1H
;; ZX_128_7FFDH 11.0.0111.1101 0C1H
; DW 11000011101101B
; DW 11010111101111B
; DB 0C1H
;;
;; HDD_DATA ...0...10.0000 020H
; DW 00000001000000B
; DW 00010001101111B
; DB 020H
;; HDD_1F1 ...0.0010.0001 021H
; DW 00000001000001B
; DW 00010111101111B
; DB 021H
;; HDD_1F2 ...0.0010.0010 022H
; DW 00000001000010B
; DW 00010111101111B
; DB 022H
;; HDD_1F3 ...0.0010.0011 023H
; DW 00000001000011B
; DW 00010111101111B
; DB 023H
;; HDD_1F4 ...0.0010.0100 024H
; DW 00000001000100B
; DW 00010111101111B
; DB 024H
;; HDD_1F5 ...0.0010.0101 025H
; DW 00000001000101B
; DW 00010111101111B
; DB 025H
;; HDD_1F6 ...0.0110.0010 026H
; DW 00000011000010B
; DW 00010111101111B
; DB 026H
;; HDD_1F7 ...0.0110.0011 027H
; DW 00000011000011B
; DW 00010111101111B
; DB 027H
;; HDD_3F6 ...0.0110.0100 028H
; DW 00000011000100B
; DW 00010111101111B
; DB 028H
;; HDD_3F7 ...0.0110.0101 029H
; DW 00000011000101B
; DW 00010111101111B
; DB 029H
;;
;; HDD_DATA 00.....10.0000 020H
; DW 00000001000000B
; DW 11000001101111B
; DB 020H
;; HDD_1F1 00...0010.0001 021H
; DW 00000001000001B
; DW 11000111101111B
; DB 021H
;; HDD_1F2 00...0010.0010 022H
; DW 00000001000010B
; DW 11000111101111B
; DB 022H
;; HDD_1F3 00...0010.0011 023H
; DW 00000001000011B
; DW 11000111101111B
; DB 023H
;; HDD_1F4 00...0010.0100 024H
; DW 00000001000100B
; DW 11000111101111B
; DB 024H
;; HDD_1F5 00...0010.0101 025H
; DW 00000001000101B
; DW 11000111101111B
; DB 025H
;; HDD_1F6 00...0110.0010 026H
; DW 00000011000010B
; DW 11000111101111B
; DB 026H
;; HDD_1F7 00...0110.0011 027H
; DW 00000011000011B
; DW 11000111101111B
; DB 027H
;; HDD_3F6 00...0110.0100 028H
; DW 00000011000100B
; DW 11000111101111B
; DB 028H
;; HDD_3F7 00...0110.0101 029H
; DW 00000011000101B
; DW 11000111101111B
; DB 029H
;;
;; PAGE0 ...0...00.1010 0E8H
; DW 00000000001010B
; DW 00010001101111B
; DB 0E8H
;; PAGE1 ...0...01.1010 0E9H
; DW 00000000101010B
; DW 00010001101111B
; DB 0E9H
;; PAGE2 ...0...10.1010 0EAH
; DW 00000001001010B
; DW 00010001101111B
; DB 0EAH
;; PAGE3 ...0...11.1010 0F0H
; DW 00000001101010B
; DW 00010001101111B
; DB 0F0H
;;
;; PAGE0 00.....00.1010 0E8H
; DW 00000000001010B
; DW 11000001101111B
; DB 0E8H
;; PAGE1 00.....01.1010 0E9H
; DW 00000000101010B
; DW 11000001101111B
; DB 0E9H
;; PAGE2 00.....10.1010 0EAH
; DW 00000001001010B
; DW 11000001101111B
; DB 0EAH
;; PAGE3 00.....11.1010 0F0H
; DW 00000001101010B
; DW 11000001101111B
; DB 0F0H
;;
;; Y_PORT(RGADR) ...0...00.1001 0C4H
; DW 00000000001001B
; DW 00010001101111B
; DB 0C4H
;; RGMOD ...0...10.1001 0C5H
; DW 00000001001001B
; DW 00010001101111B
; DB 0C5H
;;
;; Y_PORT(RGADR) 00.....00.1001 0C4H
; DW 00000000001001B
; DW 11000001101111B
; DB 0C4H
;; RGMOD 00.....10.1001 0C5H
; DW 00000001001001B
; DW 11000001101111B
; DB 0C5H
;;
;; ISA_REG ...00100101101 01BH
; DW 00000100101101B
; DW 00011111111111B
; DB 01BH
;; CMOS_DWR ...001.0111101 01EH
; DW 00000100111101B
; DW 00011101111111B
; DB 01EH
;; CMOS_AWR ...00110101101 01DH
; DW 00000110101101B
; DW 00011111111111B
; DB 01DH
;; CMOS_DRD ...011.0111101 01CH
; DW 00001100111101B
; DW 00011101111111B
; DB 01CH
;;
;; ISA_REG 00..0100101101 01BH
; DW 00000100101101B
; DW 11001111111111B
; DB 01BH
;; CMOS_DWR 00..01.0111101 01EH
; DW 00000100111101B
; DW 11001101111111B
; DB 01EH
;; CMOS_AWR 00..0110101101 01DH
; DW 00000110101101B
; DW 11001111111111B
; DB 01DH
;; CMOS_DRD 00..11.0111101 01CH
; DW 00001100111101B
; DW 11001101111111B
; DB 01CH
;
; DW 0,0,0 ; DCP END MARKER
;
;
;
;
;

764
ZX_EXP/EXP_FN.ASM Normal file
View File

@ -0,0 +1,764 @@
TAB_FNS:
;FN_80h
DW LP_OPEN_S ; ®âªàë⨥ ®ª­ 
DW LP_PRINT_ALL ; ¯¥ç âì ᨬ¢®«  ¢ ®ª­®
DW LP_PRINT_SYM ; ¯¥ç âì ᨬ¢®«  ¡¥§  âà
DW LP_PRINT_ATR ; ¯¥ç âì ⮫쪮  âਡãâ 
DW LP_SET_PLACE ; ãáâ ­®¢ª  ¯®§¨æ¨¨ ¯¥ç â¨
DW LP_PRINT_LINE ; ¯¥ç âì áâப¨ ¤«¨­®© B
DW LP_PRINT_LINE2 ; ¯¥ç âì áâப¨ -//- ¡¥§  âਡã⮢
DW LP_PRINT_LINE3 ; ¯¥ç âì áâப¨ ¤«¨­®© B ¤® D
;FN_88h
DW LP_PRINT_LINE4 ; ¯¥ç âì áâப¨ -//- ¡¥§  âਡã⮢
DW LP_CLS_WIN
DW LP_SCROLL_UD
DW LP_PRINT_LINE5
DW LP_PRINT_LINE6
DW LP_CLS_WIN_2
DW LP_GET_PLACE
DW FN_TURBO
;FN_90h
DW EMM_FN0 ; ­¥à §àãè î饥 ®¯à¥¤¥«¥­¨¥ ®¡ê¥¬  އ“.
DW EMM_FN1 ; ¨­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨
DW EMM_FN2 ; ¯®«ãç¨âì ¡«®ª ¯ ¬ïâ¨
DW EMM_FN3 ; ®á¢®¡®¤¨âì ¡«®ª ¯ ¬ïâ¨
DW EMM_FN4 ; ¯®«ãç¨âì ­®¬¥àa áâà ­¨æ RAM-Disk
DW EMM_FN5 ; ¯®«ãç¨âì á«¥¤ãîéãî áâà ­¨æã
DW EMM_FN6 ; ¯®«ãç¨âì  ¤à¥á  ¯®à⮢
DW EMM_FN7 ; ¨­¨æ¨ «¨§ æ¨ï ***
;FN_98h
DW RAMD_CALC_PAGE ; Fn 98h
DW SET_DISK_TYPE
DW DISK_REDIR
DW FN_NO
DW FN_NO
DW EMM_DIV ; à §¤¥«¥­¨ï ¡«®ª  ­  ¤¢ .
DW EMM_ADD ; ᫨ﭨ¥ ¤¢ãå ¡«®ª®¢
DW MSDOS_COLD_VARS ; ¨­¨æ¨ «¨§ æ¨ï ¢á¥© ¯ ¬ïâ¨
;FN_A0h
DW PIC_FN0 ; ŽŠ<E28099>ˆ… ŽŠ<C5BD>€ - Fn 0A0h
DW PIC_FN1 ; ‚›‚…‘’ˆ ’Ž—Š“
DW PIC_FN2 ; ‚›‚Ž„ ˆ<E280B9>ˆˆ COPY
DW PIC_FN3 ; ‚›‚Ž„ ˆ<E280B9>ˆˆ FILL
DW PIC_FN4 ; ‚›‚Ž„ <20>ˆ<CB86>
DW PIC_FN5 ; “<E28099>ŽŠ€ RGMOD
DW PIC_FN6 ; A - page_pal, E - ­®¬¥à ¯ «¨âàë, B - ⨯ ¯ «¨âàë
DW PIC_FN7
;FN_A8h
DW PIC_FN8
DW PIC_FN9
DW PIC_FN10
DW PIC_FN11
DW PIC_FN12
DW PIC_FN14
DW PIC_FN14
DW PIC_FN15
;FN_B0h
DW WIN_OPEN_WIN ; ®âªàë⨥ ®ª­  ¯® ®¯¨á â¥«î
DW WIN_CLOSE_WIN ; § ªàë⨥ ®ª­ 
DW WIN_COPY_WIN ; á®åà ­¥­¨¥ ⥪á⮢®£® ®ª­  ¢ ¯ ¬ïâ¨
DW WIN_REST_WIN ; ¢®ááâ ­®¢«¥­¨¥ ⥪á⮢®£® ®ª­  ¨§ ¯ ¬ïâ¨
DW WIN_GET_SYM ; ¢§ïâì ᨬ¢®«
DW WIN_PUT_SYM ; ¯®«®¦¨âì ᨬ¢®«
DW WIN_SET_ZG ; § £à㧪  §­ ª®£¥­¥à â®à 
DW WIN_MOVE_WIN ; ¯¥à¥¬¥áâ¨âì ®ª­®
;FN_B8h
DW WIN_GET_ZG ; ¯®«ãç¨âì §­ ª®£¥­¥à â®à
DW FN_NO
DW FN_NO
DW FN_NO
DW FN_NO
DW FN_NO
DW FN_NO
DW FN_NO
;FN_C0h
DW EMM_FN0 ; ¯®«ãç¨âì ¤ ­­ë¥ ®¡ ®¡ê¥¬¥ ¯ ¬ï⨠¨ ª®«-¢® ᢮¡. áâà.
DW EMM_FN1 ; ¨­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨
DW EMM_FN2M ; ¯®«ãç¨âì ¡«®ª ¯ ¬ïâ¨
DW EMM_FN3M ; ®á¢®¡®¤¨âì ¡«®ª ¯ ¬ïâ¨
DW EMM_FN4M ; ¯®«ãç¨âì ­®¬¥à áâà ­¨æë ¢ ¡«®ª¥ ¯ ¬ïâ¨
DW EMM_FN5M ; ¯®«ãç¨âì ᯨ᮪ áâà ­¨æ ¡«®ª  ¯ ¬ïâ¨
DW EMM_FN6 ; ¯®«ãç¨âì  ¤à¥á  ¯®à⮢ ®ª®­
DW EMM_FN5 ; ¯®«ãç¨âì á«¥¤ãîéãî áâà ­¨æã ¡«®ª 
;FN_C8h
DW BLK_R_W ; äã­ªæ¨ï ç⥭¨ï/§ ¯¨á¨ ¢ ¡«®ª ¯ ¬ïâ¨
DW BLK_TO_RAMD ; ­ §­ ç¨âì ¡«®ª RAM-Disk-ã
DW RAMD_CLEAR ; ®á¢®¡®¤¨âì RAM-Disk
DW RAMD_TO_DRV ; ­ §­ ç¨âì RAM-Disk ­  ¤¨áª®¢®¤
DW FDD_TO_DRV ; ­ §­ ç¨âì REAL_DRIVE ­  ¤¨áª®¢®¤
DW HDD_TO_DRV ; ­ §­ ç¨âì HDD ­  ¤¨áª®¢®¤
DW GET_RAMD_ST ; ¯®«ãç¨âì ⨯ ­ §­ ç¥­¨ï ­  RAM-Disk
DW GET_DRV_ST ; ¯®«ãç¨âì ⨯ ­ §­ ç¥­¨ï ­  ¤¨áª®¢®¤
;FN_D0h
DW FN_LIB
DW FN_LIB
DW FN_LIB
DW FN_LIB
DW FN_LIB
DW FN_LIB
DW FN_LIB
DW FN_LIB
;FN_D8h
DW FN_LIB
DW FN_LIB
DW FN_LIB
DW FN_LIB
DW FN_LIB
DW FN_LIB
DW FN_LIB
DW FN_LIB
;FN_E0h
DW LP_PRINT_LINE_DIR
DW FN_NO
DW FN_NO
DW FN_NO
DW FN_NO
DW FN_NO
DW FN_NO
DW FN_NO
;FN_E8h
DW FN_SENT_BYTE ; ¯®á« âì ¡ ©â ç¥à¥§ PC_link
DW FN_RESEIVE_B ; ¯à¨­ïâì ¡ ©â ç¥à¥§ PC_link
DW FN_KBD_OUT ; ¯®á« âì ¡ ©â ¢ ª« ¢¨ âãàã
DW FN_NO
DW FN_NO
DW FN_CRIPT
DW AY8910
DW FN_VERSION
;FN_F0h
DW SPRINTER_1
DW SPRINTER_2
DW FN_SINC
DW SPRINTER_ALL
DW DCP_FN0
DW CMOS_TEST
DW CMOS_RD
DW CMOS_WR
;FN_F8h
DW SET_ROM_PAGES
DW READ_PORTS ;
DW WRITE_PORTS ;
DW GOTO_SPEC ; Goto Spectrum!
DW FN_NO
DW FN_RESET
DW FN_NO ; SAVE_AUTOSTART
DW FN_VERSION
EXP_FNS: ; ‚室 ¢ äã­ªæ¨î ¨§ DOS
POP AF
CALL EXP_FNS1
CALL DOS_ON
JP EXP_FNS_RET
;************************************
EXP_FNS_RST18: ; ‚室 ¢ äã­ªæ¨î ¯® RST18 ¨ RST8
bit 7,c
JR Z,ower2_fn
CALL EXP_FNS1
RET
ower2_fn:
BIT 6,C
RES 6,C
JR NZ,EXP_HDD_X
SCF
RET
EXP_HDD_X:
CALL EXP_HDD
RET
;**********************************
FN_CRIPT:
DEC B
SCF
RET NZ
LD HL,(ROM_NUMBER)
LD A,(ROM_NUMBER+2)
LD BC,5281h
LD DE,47E8h
AND A
RET
;**********************************
START_DI:
PUSH AF
LD A,R
JP PE,XX_DI
LD A,R
XX_DI: LD A,80h
JP PE,XX_DI2
XOR A
XX_DI2: LD R,A
DI
POP AF
RET
END_DI: PUSH AF
LD A,R
BIT 7,A
JR Z,XX_DI3
EI
POP AF ; PE
RET
XX_DI3: DI
POP AF ; PO
RET
;**********************************
EXP_FNS1:
PUSH HL
PUSH AF
LD L,C
SLA L
LD H,TAB_FNS/256
LD A,(HL)
INC L
LD H,(HL)
LD L,A
POP AF
EX (SP),HL
RET
READ_PORTS:
WRITE_PORTS:
FN_NO:
SCF
RET
SET_ROM_PAGES: ; in A - page, B - new ROM-page
; out B - old ROM-page
EX AF,AF'
LD A,CNF_0
OUT (CNF_PORT),A
LD C,PAGE2 ; ¯®«ãç¨âì áâà ­¨æã
IN D,(C)
LD A,40H ; ãáâ ­®¢¨âì ­®¢ãî
OUT (C),A
LD A,(08000H) ; á®åà ­¨âì â® çâ® ¡ë«®
LD L,A
LD A,(08200H)
LD H,A
EX AF,AF' ; áâà ­¨æ 
LD (08000H),A ; ãáâ ­®¢¨âì ¯®àâ ROM TR-DOS
LD (08200H),A
EX AF,AF'
LD A,B
LD BC,0
EX AF,AF'
IN A,(C)
EX AF,AF'
OUT (C),A ; ãáâ ­®¢¨âì ­®¢ë© TR-DOS
EX AF,AF'
LD B,A
LD A,L
LD (08000H),A ; ¢¥à­ãâì ¯®àâ
LD A,H
LD (08200H),A ; ¢¥à­ãâì ¯®àâ
LD C,PAGE2
LD A,SYS_PAGE
OUT (C),A
LD A,(CONFIG_DE-4000H)
OUT (C),D ; ¢¥à­ãâì áâà ­¨æã
OUT (CNF_PORT),A
AND A
RET
;TAB_SIZE EQU $-TAB_FNS
;******************************************
;*********************************************
;*****************************************
;
; ”ã­ªæ¨ï ¤¥è¨äà â®à  ¯®à⮢.
; HL -  ¤à¥á
; DE - ¬ áª  - 0 ¨§¬¥­ï¥¬ë¥ ¡¨âë, 1 ­¥¨§¬¥­ï¥¬ë¥
; B - ¯®àâ
;
; ALL STACKS, DI
;
;*****************************************
DCP_FN0:
AND A
JP Z,PORTS_INIT
PUSH IX
LD IX,RET_DCP_FN0
IN A,(PAGE3)
EX AF,AF'
LD A,DCP_PAGE
OUT (PAGE3),A
JP DCP_FN0M
RET_DCP_FN0:
EX AF,AF'
OUT (PAGE3),A
AND A
POP IX
RET
BLK_TO_RAMD: ; RAM-Disk A, BLK - B
CP RAMD_KEY_NUM
CCF
RET C
PUSH HL
PUSH BC
LD L,A
IN A,(PAGE2)
LD C,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,L
LD HL,RAMD_KEYS-4000H
ADD A,L
LD L,A
LD A,(HL) ; ª«îç ¡«®ª 
AND A
JR NZ,BLK_BUSY ; RAM-Disk § ­ïâ - ®è¨¡ª 
LD (HL),B
LD A,C
OUT (PAGE2),A
LD A,B
AND A
POP BC
POP HL
RET
BLK_BUSY:
LD A,C
OUT (PAGE2),A
SCF
POP HL
RET
RAMD_CLEAR: ; RAM-Disk A
CP RAMD_KEY_NUM
CCF
RET C
PUSH HL
LD L,A
IN A,(PAGE2)
LD C,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,L
LD HL,RAMD_KEYS-4000H ; RAM-Disk ᢮¡®¤¥¬
ADD A,L
LD L,A
LD B,A ; § ¯®¬­¨âì 㤠«ï¥¬ë© à ¬¤¨áª
LD A,(HL)
AND A
JR Z,BLK_BUSY ; ¢®§¢à â á ®è¨¡ª®©
LD (HL),0
LD A,C
OUT (PAGE2),A
AND A
POP HL
RET
RAMD_TO_DRV: ; RAM-Disk A, DRV - B
CP RAMD_KEY_NUM
CCF
RET C
LD C,A
LD A,B
CP 4
CCF
RET C
LD HL,DISK_TYPE-4000H
LD L,B
IN A,(PAGE2)
LD B,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,C
ADD A,4
LD (HL),A
LD A,B
OUT (PAGE2),A
AND A
RET
FDD_TO_DRV: ; Disk A, DRV - B
CP 4
CCF
RET C
LD C,A
LD A,B
CP 4
CCF
RET C
LD HL,DISK_TYPE-4000H
LD L,B
IN A,(PAGE2)
LD B,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD (HL),C
LD A,B
OUT (PAGE2),A
AND A
RET
HDD_TO_DRV: ; HDD A, DRV - B
AND 0FH
LD C,A
LD A,B
CP 4
CCF
RET C
LD HL,DISK_TYPE-4000H
LD L,B
IN A,(PAGE2)
LD B,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,C
ADD A,40H
LD (HL),A
LD A,B
OUT (PAGE2),A
AND A
RET
GET_RAMD_ST:
CP RAMD_KEY_NUM
CCF
RET C
PUSH BC
LD HL,RAMD_KEYS-4000H
ADD A,L
LD L,A
IN A,(PAGE2)
LD B,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD C,(HL)
LD A,B
OUT (PAGE2),A
LD A,C
POP BC
AND A
RET
GET_DRV_ST:
CP 4
CCF
RET C
PUSH BC
LD HL,DISK_TYPE-4000H
ADD A,L
LD L,A
IN A,(PAGE2)
LD B,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD C,(HL)
LD A,B
OUT (PAGE2),A
LD A,C
POP BC
AND A
RET
CMOS_EMU_WR:
PUSH DE
LD C,PAGE3
IN B,(C)
LD E,SYS_PAGE
OUT (C),E
LD E,D
LD D,0FFH
LD (DE),A
OUT (C),B
POP DE
RET
;***********************************************
;
; CMOS - 35h,36h - ãáâ ­®¢ª¨ ¡¥©á¨ª 
;
;***********************************************
CMOS_WR:
WR_CMOS: ; § ¯¨áì á CMOS
CALL CMOS_TEST
JR C,CMOS_EMU_WR
XWR_CMOS: ; § ¯¨áì á CMOS
LD BC,CMOS_AWR
OUT (C),D
LD BC,CMOS_DWR
OUT (C),A
RET
CMOS_EMU_RD:
PUSH DE
LD C,PAGE3
IN B,(C)
LD E,SYS_PAGE
OUT (C),E
LD E,D
LD D,0FFH
LD A,(DE)
OUT (C),B
POP DE
RET
CMOS_RD:
RD_CMOS: ; ç⥭¨¥ ¨§ CMOS
CALL CMOS_TEST
JR C,CMOS_EMU_RD
XRD_CMOS: ; ç⥭¨¥ ¨§ CMOS
LD BC,CMOS_AWR
OUT (C),D
LD BC,CMOS_DRD
IN A,(C)
RET
CMOS_TEST:
PUSH DE
PUSH BC
PUSH AF
LD D,3FH
CALL XRD_CMOS
LD E,A
CPL
CALL XWR_CMOS
CALL XRD_CMOS
CPL
CP E
JR NZ,CMOS_ERR
LD A,E
CALL XWR_CMOS
POP AF
POP BC
POP DE
AND A
RET
CMOS_ERR:
LD A,E
CALL XWR_CMOS
POP AF
POP BC
POP DE
SCF
RET
;
;DE - ªã¤  - áâà ­¨æ  ®âªàëâ !
;BC - ᪮«ìª®
;HL - ¡ãä¥à
;
; PUSH BC
; LD H,D
; LD L,E
; ADD HL,BC
; JR C,CUT
; LD HL,BUFER
; LDIR
; POP BC
; RET
;CUT:
; PUSH HL
; LD A,L
; LD L,C
; LD C,A
; LD A,H
; LD H,B
; LD B,A
;
; AND A
; SBC HL,BC
; LD B,H
; LD C,L
; LD HL,BUFER
; LDIR
; CALL NEXT_BANK
; POP BC
; LD A,B
; OR C
; JR Z,LAB
; LDIR
;LAB: POP BC
; RET
;
FN_TURBO:
CP 2
JR Z,FN_TB_ONOFF
CP 3
JR Z,FN_TB_ONOFF
SCF
RET
FN_TB_ONOFF:
LD C,A
IN A,(PAGE3)
LD B,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD DE,(CONFIG_DE)
LD A,E
AND 0FCh
OR C
LD E,A
OUT (CNF_PORT),A
LD (CONFIG_DE),DE
LD A,B
OUT (PAGE3),A
AND A
RET
EMM_FN9:
EMM_DIV: ; à §¤¥«¨âì ¡«®ª ¯ ¬ï⨠­  ¤¢  ¡«®ª 
; A - ¡«®ª, B - ¤«¨­  ¯¥à¢®£® ¡«®ª  ¯®á«¥ à §¤¥«¥­¨ï
; ¢ë室: A - ¡«®ª 1, B - ¡«®ª 2
INC B
DEC B
SCF
RET Z
DEC B
LD E,A
CALL EMM_FN4M ; ¯®«ãç¨âì ­®¬¥à áâà ­¨æë ¡«®ª 
RET C
LD D,A
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD H,RAMD_FAT/256-40H
LD L,D
LD A,(HL)
LD (HL),0FFH
LD B,A
EX AF,AF'
OUT (PAGE2),A
LD A,E
AND A
RET
EMM_FN8:
EMM_ADD: ; ᫨âì ¤¢  ¡«®ª  ¯ ¬ï⨠¢ ®¤¨­
; € - ¡«®ª 1, B - ¡«®ª 2
; ¢ë室: € - ¡«®ª
LD E,A
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD H,RAMD_FAT/256-40H
LD L,E
LD C,B
LD B,0
EMM_ADD_L:
LD A,(HL)
AND A
JR Z,EMM_ADD_ERR
CP 0FFH
JR Z,EMM_ADD_NEXT
LD L,A
DJNZ EMM_ADD_L
EMM_ADD_ERR:
EX AF,AF'
OUT (PAGE2),A
SCF
RET
EMM_ADD_NEXT:
LD A,C
AND A
JR Z,EMM_ADD_ERR
LD (HL),A
EX AF,AF'
OUT (PAGE2),A
AND A
LD A,E
RET
FN_RESET: ; B - ¯ à ¬¥âà á¡à®á 
DEC B ; B = 1 - á¡à®á ¡¥§ ¯¥à¥§ £à㧪¨ á奬ë.
; B = 2 - á¡à®á á ¯¥à¥§ £à㧪®© á奬ë
; ?? B = 3 - á¡à®á á ¯¥à¥§ £à㧪®© EP1K30
JR Z,RESET_1
; DEC B
; JR Z,RESET_2
DEC B
RET NZ
INC B
RESET_1:
DI
LD A,0
LD BC,1FFDH
OUT (C),A
LD B,7FH
OUT (C),A
LD A,40H ;DCP_PAGE
OUT (PAGE3),A
LD A,5
OUT (PAGE1),A
LD A,2
OUT (PAGE3),A
LD A,0
OUT (PAGE0),A
OUT (RGADR),A
OUT (RGMOD),A
;OUT (#E9),A ; #E9 = RGSCR ­¥ ॠ«¨§®¢ ­® ¢ á奬¥
; JP Z,0
JP RESET_ALL

731
ZX_EXP/EXP_FN2.ASM Normal file
View File

@ -0,0 +1,731 @@
;*****************************************************************
;
; ”㭪樨 à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
;
;*****************************************************************
; Ž¯à¥¤¥«¥­¨¥ ®¡ê¥¬  ¯ ¬ïâ¨.
; ‚ë室: BC - FREE MEM ¢ ¡«®ª å ¯® 16k, HL - FULL MEM
;*****************************************************************
EMM_FN0:
IN A,(PAGE2)
LD B,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD HL,RAMD_FAT-4000H
LD C,0
EMM_FN0_L1:
LD A,(HL)
INC L
JR Z,EMM_FN0_L2
AND A
JR NZ,EMM_FN0_L1
INC C
JR EMM_FN0_L1
EMM_FN0_L2:
LD HL,100H
LD A,B
LD B,0
OUT (PAGE2),A
RET
;
;*****************************************************************
; ˆ­¨æ¨ «¨§ æ¨ï à á¯à¥¤¥«¥­¨ï ¯ ¬ïâ¨.
;*****************************************************************
EMM_FN1:
PUSH BC
PUSH HL
PUSH DE
IN A,(PAGE2)
LD C,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD HL,RAMD_FAT-4000H ; €¤à¥á FAT އ“.
EMM_F1_L1: ; ‚ᥠáâà ­¨æë ᢮¡®¤­ë.
LD (HL),0
INC L
JR NZ,EMM_F1_L1
;*************************
LD DE,TAB_PGS ; â ¡«¨æ  § ­ïâëå á¨á⥬­ëå áâà ­¨æ
EMM_F1_L2:
LD A,(DE)
CP 0FFH
JR Z,EMM_F1_L3
INC DE
LD L,A
LD A,(DE)
LD (HL),A
JR EMM_F1_L2
EMM_F1_L3:
LD L,A
LD (HL),A
EMM_F1_RAMD_INI:
LD HL,RAMD_KEYS-4000H ; ˆ­¨æ¨ «¨§ æ¨ï ª«î祩 RAM-Disks
LD B,RAMD_KEY_NUM
EMM_F1_L5:
LD (HL),0
INC L
DJNZ EMM_F1_L5
LD A,C
OUT (PAGE2),A
POP DE
POP HL
POP BC
RET
;************************************
TAB_PGS:
DB 0,1,2,3,4,5,6,7
DB 08H,09H,0AH,0BH,0CH,0DH,0EH,0FH
DB 40H
DB 50H,51H,52H,53H,54H,55H,56H,57H
DB 58H,59H,5AH,5BH,5CH,5DH,5EH,5FH
DB 0FCH,0FDH,0FEH,0FFH
;*****************************************************************
; <09>®«ãç¨âì ¡«®ª ¯ ¬ï⨠N bytes,
; ‚室: B - ç¨á«® ­¥®¡å®¤¨¬ëå ¡«®ª®¢
; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨
; CF - ¯à¨§­ ª ®è¨¡ª¨
;*****************************************************************
EMM_FN2M:
PUSH DE
PUSH BC
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD C,B ; á®åà ­¨âì ç¨á«® ­ã¦­ëå ¡«®ª®¢
LD HL,RAMD_FAT-4000H
EMM_F2M_L1: ; –¨ª« ¯à®¢¥àª¨ ­ «¨ç¨ï ­ã¦­ëå ¡«®ª®¢.
DEC L
JR Z,EMM_F2M_NO_RAM
LD A,(HL)
AND A
JR NZ,EMM_F2M_L1
DJNZ EMM_F2M_L1
;**************************
; Œ¥áâ® ¥áâì !
;**************************
LD B,C ; ‚®ááâ ­®¢¨âì ­ã¦­ë© ®¡ê¥¬ ¤¨áª 
LD C,0FFH ; Œ…’Š€ ŠŽ<C5A0>€ RAM-Disk
LD HL,RAMD_FAT-4000H
EMM_F2M_L2: ; ‡ ¯®«­¨âì RAMD_FAT
DEC L
LD A,(HL)
AND A
JR NZ,EMM_F2M_L2
LD (HL),C
LD C,L
DJNZ EMM_F2M_L2
;************************************
; L - 㪠§ â¥«ì 楯®çª¨.
;************************************
EX AF,AF'
OUT (PAGE2),A
LD A,L
AND A
POP BC
POP DE
RET
EMM_F2M_NO_RAM:
LD L,1 ; <20> <20>€ŒŸˆ
EX AF,AF'
OUT (PAGE2),A
LD A,L
SCF
POP BC
POP DE
RET
;*****************************************************************
; <09>®«ãç¨âì ¡«®ª ¯ ¬ï⨠N bytes, ¤«ï RAM-Disk A
; ‚室: B - ç¨á«® ­¥®¡å®¤¨¬ëå ¡«®ª®¢, A - RAM-Disk
; ‚ë室: L,A - Š‹ž— RAM-Disk/ª®¤ ®è¨¡ª¨
; CF - ¯à¨§­ ª ®è¨¡ª¨
;*****************************************************************
EMM_FN2:
PUSH AF
CALL EMM_FN2M
JR C,EMM_FN2_L1
LD B,A
POP AF
CALL BLK_TO_RAMD
RET NC
; LD A,B
; CALL EMM_FN3M
; SCF
LD L,2 ; RAM-Disk § ­ïâ
RET
EMM_FN2_L1:
POP AF ; ­¥â ¯ ¬ïâ¨
LD L,1
SCF
RET
;;*****************************************************************
;; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ïâ¨
;; ‚室: A - <20>€—€Ž <E28093>Ž—Šˆ
;;*****************************************************************
EMM_FN3M:
AND A
SCF
RET Z
LD L,A
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD H,RAMD_FAT/256-40h
LD A,L
EMM_F3M_L1:
LD L,A
LD A,(HL) ; á«¥¤ãî騩 ¡«®ª
AND A
JR Z,EMM_FN3M_ERR
LD (HL),0 ; Žá¢®¡®¤¨âì
CP 0FFH ; …᫨ ­¥ ª®­¥æ
JR NZ,EMM_F3M_L1 ; ¯à®¤®«¦ âì
EX AF,AF'
OUT (PAGE2),A
LD A,0
AND A
RET
EMM_FN3M_ERR:
EX AF,AF'
OUT (PAGE2),A
LD A,2
SCF
RET
;*****************************************************************
; Žá¢®¡®¤¨âì ¡«®ª ¯ ¬ï⨠ª«îç  K
; ‚室: A - Š‹ž— RAM-Disk
;*****************************************************************
EMM_FN3:
CALL GET_RAMD_ST
RET C
SCF
RET Z
LD C,A
IN A,(PAGE2)
LD B,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD (HL),0
LD A,B
OUT (PAGE2),A
LD A,C
JR EMM_FN3M
;*****************************************************************
; <09>®«ãç¨âì áâà ­¨æã N ¡«®ª  K
; ‚室: A - ¡«®ª, B - ­®¬¥à áâà ­¨æë
; ‚ë室: A - áâà ­¨æ , IF CF - A=0 - ­¥â ¡«®ª , A=FF - END
;*****************************************************************
EMM_FN4M:
LD L,A
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
INC B
LD H,RAMD_FAT/256-40H
EMM_F4M_L1:
LD A,(HL)
AND A
JR Z,EMM_F4M_ERR
DEC B
JR Z,EMM_F4M_END
LD L,A
CP 0FFH
JR NZ,EMM_F4M_L1
EMM_F4M_ERR:
LD L,A
EX AF,AF'
OUT (PAGE2),A
LD A,L
SCF
RET
EMM_F4M_END:
EX AF,AF'
OUT (PAGE2),A
LD A,L
AND A
RET
;*****************************************************************
; <09>®«ãç¨âì áâà ­¨æã N ª«îç  K
; ‚室: A - Š‹ž— RAM-Disk, B - ­®¬¥à áâà ­¨æë
; ‚ë室: A - áâà ­¨æ 
;*****************************************************************
EMM_FN4:
CALL GET_RAMD_ST
RET C
SCF
RET Z
JR EMM_FN4M
;*****************************************************************
; <09>®«ãç¨âì á«¥¤ãîéãî áâà ­¨æã ¯® FAT
; ‚室: A - áâà ­¨æ  އ“
; ‚ë室: A - á«¥¤ãîé ï áâà ­¨æ  އ“
;*****************************************************************
EMM_FN5:
LD L,A
AND A
SCF
RET Z
IN A,(PAGE2)
LD H,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,H
LD H,RAMD_FAT/256-40H
LD L,(HL)
OUT (PAGE2),A
LD A,L
AND A
SCF
RET Z
AND A
RET
;*****************************************************************
; <09>®«ãç¨âì ᯨ᮪ áâà ­¨æ ¡«®ª  ¢ HL
; ‚室: A - ¡«®ª, HL -  ¤à¥á ¡ãä¥à  - 256 ¡ ©â.
; ‚ë室: HL -  ¤à¥á ¡«®ª , B - ¤«¨­  ¡«®ª  ¢ áâà ­¨æ å އ“
;*****************************************************************
EMM_FN5M:
PUSH DE
PUSH HL
EX DE,HL
LD B,0
LD L,A
EMM_FN5M_L:
LD A,L
LD (DE),A
INC DE
AND A
JR Z,EMM_FN5M_ERR
CP 0FFH
JR Z,EMM_FN5M_END
IN A,(PAGE2)
LD C,A
LD A,SYS_PAGE
OUT (PAGE2),A
LD H,RAMD_FAT/256-40H
LD L,(HL)
LD A,C
OUT (PAGE2),A
INC B
JR NZ,EMM_FN5M_L
EMM_FN5M_ERR:
SCF
POP HL
POP DE
RET
EMM_FN5M_END:
POP HL
POP DE
AND A
RET
;*****************************************************************
; <09>®«ã祭¨¥  ¤à¥á®¢ ¯®à⮢ ¨ ¤ ­­ëå ¤«ï ¢®ááâ ­®¢«¥­¨ï
; ‚室: A - ­®¬¥à ®ª­  ¯à®¥æ¨à®¢ ­¨ï
; ‚ë室: B - ¤ ­­ë¥, C -  ¤à¥á ¯®àâ  ®ª­ 
;*****************************************************************
EMM_FN6:
AND A
LD C,PAGE0
IN B,(C)
RET Z
DEC A
LD C,PAGE1
IN B,(C)
RET Z
DEC A
LD C,PAGE2
IN B,(C)
RET Z
DEC A
LD C,PAGE3
IN B,(C)
RET Z
SCF
RET
FN_RAMD_R_W EQU 9BH
BLK_R_W:
RAMD_R_W:
; ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
; º RD/WR SECTOR HL - BUFER º\
; º DE - ABS sector ¢ 256b ¡«®ª å º\
; º B - ç¨á«® ¤ ­­ëå ¢ 256b ¡«®ª å º\
; º A' - ª®¬ ­¤  ç⥭¨¥/§ ¯¨áì º\
; º A - block RAM º\
; º 0 - ç⥭¨¥, 255 - § ¯¨áì º\
; º ** NOT USED TR-DOS VARS ** º\
; ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ\
; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
AND A
SCF
RET C
PUSH HL
PUSH BC
INC D
LD C,PAGE2
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD H,82H
LD L,A
RAMD_LOOP_D:
DEC D
JR Z,NOT_FOUR_BLK
LD L,(HL)
LD L,(HL)
LD L,(HL)
LD L,(HL)
JR RAMD_LOOP_D
NOT_FOUR_BLK:
LD A,E
NOT_FOUR_BLK1:
SUB 40H
JR C,NOT_ONE_BLK
LD L,(HL)
JR NOT_FOUR_BLK1
NOT_ONE_BLK:
AND 3FH
; ADD A,40H
LD D,A ; DE - ADRESS in RAM-Disk
LD E,0
LD A,L ; L - ⥪ã騩 ¡ ­ª RAM-Disk
OUT (C),B ; ¢®ááâ ­®¢¨âì áâà ­¨æã
POP BC ; ¤«¨­  ¤ ­­ëå
POP HL ;  ¤à¥á ¡ãä¥à 
BIT 7,H
JR NZ,BLK_PAGE1
BLK_PAGE3:
LD C,PAGE3
IN C,(C)
OUT (PAGE3),A
SET 7,D
SET 6,D
JR BLK_CONT1
BLK_PAGE1:
LD C,PAGE1
IN C,(C)
OUT (PAGE1),A
RES 7,D
SET 6,D
BLK_CONT1:
EX AF,AF'
AND A
JR NZ,NO_EX_RW1
EX DE,HL
NO_EX_RW1:
EX AF,AF'
LD A,16
BLK_LL1:
DUP 16
LDI
EDUP
DEC A
JR NZ,BLK_LL1
EX AF,AF'
JR NZ,NO_EX_RW2
EX DE,HL
NO_EX_RW2:
EX AF,AF'
INC B
DEC B
JP Z,BLK_EXIT_1
BIT 6,D
JP NZ,BLK_CONT1
BIT 7,D
JR Z,BLK_PAGE3_X
IN A,(PAGE1)
LD E,A
LD D,42H
LD A,SYS_PAGE
OUT (PAGE1),A
LD A,(DE)
OUT (PAGE1),A
LD DE,4000H
JP BLK_CONT1
BLK_PAGE3_X:
IN A,(PAGE3)
LD E,A
LD D,0C2H
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(DE)
OUT (PAGE3),A
LD DE,0C000H
BIT 7,H
JP Z,BLK_CONT1
LD E,A
LD A,C
OUT (PAGE3),A
IN A,(PAGE1)
LD C,A
LD A,E
OUT (PAGE1),A
LD DE,4000H
JP BLK_CONT1
BLK_EXIT_1:
LD A,D
RLCA
XOR D
RLCA
JR NC,BLK_EXIT_2
LD A,C
OUT (PAGE1),A
AND A
RET
BLK_EXIT_2:
LD A,C
OUT (PAGE3),A
AND A
RET
DISK_REDIR:
PUSH HL
LD HL,DISK_TYPE-4000h
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,(OPER_DISK)
AND 3
ADD A,L
LD L,A
LD L,(HL)
EX AF,AF'
OUT (PAGE2),A
LD A,L
POP HL
RET
SET_DISK_TYPE:
PUSH HL
LD HL,DISK_TYPE-4000H
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD A,(OPER_DISK)
AND 3
ADD A,L
LD L,A
LD (HL),E
LD L,(HL)
EX AF,AF'
OUT (PAGE2),A
LD A,L
POP HL
RET
RAMD_CALC_PAGE: ; ¢å®¤: DE - ram_disk trk_sec, A - RAM-Disk
; ¢ë室: HL -  ¤à¥á, A - page
CP 16
CCF
RET C ; <20> ’€ŠŽƒŽ RAM-Disk
PUSH AF
LD H,D
LD L,E
ADD HL,HL
ADD HL,HL
LD B,H
LD A,E
OR 0C0H
LD C,A ; C - ç áâì  ¤à¥á , B - áâà ­¨æ 
POP AF
CALL EMM_FN4 ; <20>Ž“—ˆœ <E28098><EFBFBD>ˆ
LD L,0
LD H,C
; RET C
; LD B,A
; LD A,B
; CP 0FFH
; CCF
RET
;*****************************************************
;
; HL - ¡ãä¥à
;
;*****************************************************
Version EQU 020DH ; Version BIOS
ID_SPRINTER:
DB 'Sprinter BIOS: ver 2.13',0,"Sprinter",0,0
L_ID EQU $-ID_SPRINTER
;*****************************************************
FN_VERSION:
PUSH HL
EX DE,HL
LD HL,ID_SPRINTER
LD BC,L_ID
LDIR
POP HL
LD DE,Version
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD BC,(CONFIG_BYTE-4000h) ; Version PLD
EX AF,AF'
OUT (PAGE2),A
LD A,2 ; —¨á«® ¯®«¥©
AND A
RET
;*****************************************************
EMM_FN7:
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
LD HL,08000H
LD DE,ID_SPRINTER
LD B,L_ID
ID_LOOP:
LD A,(DE)
CP (HL)
JR NZ,INIT_SYS_ALL
INC HL
INC DE
DJNZ ID_LOOP
EX AF,AF'
OUT (PAGE2),A
RET
MSDOS_COLD_VARS:
DI
IN A,(PAGE2)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE2),A
INIT_SYS_ALL:
LD DE,08000H
LD HL,ID_SPRINTER
LD BC,L_ID
LDIR
LD HL,DISK_TYPE-4000h
LD (HL),0
INC HL
LD (HL),1
INC HL
LD (HL),40H ; HDD
INC HL
LD (HL),3
INC HL
LD (HL),0 ; PAGE0
INC HL
LD (HL),5 ; PAGE1
INC HL
LD (HL),2 ; PAGE2
INC HL
LD (HL),0 ; PAGE3
LD A,9
LD (MSD_SECS-4000h),A
LD A,0
LD (DS_1440-4000h),A
LD HL,RAMD_KEYS-4000h
LD DE,RAMD_KEYS+1-4000h
LD BC,RAMD_KEY_NUM-1
LD (HL),0
LDIR
LD DE,ZG_ADRESS
LD (WIN_ZG-4000h),DE
LD HL,L_SCORPION
LD (CONFIG_ALL-4000h),HL
LD DE,CNF_0
LD (CONFIG_DE-4000h),DE
LD HL,TASK_DATA-4000h ; 㡨âì ¢á¥ § ¤ ç¨
LD DE,TASK_DATA+1-4000h
LD BC,0FFH
LD (HL),0
LDIR
EX AF,AF'
OUT (PAGE2),A
CALL EMM_FN1
RET

673
ZX_EXP/EXP_HDD.ASM Normal file
View File

@ -0,0 +1,673 @@
;;.PRINTX "HDD utility"
DEFINE HDD_TYPE 1
MACRO WAIT_HDD
.LL1:
LD BC,P_HDST
IN A,(C)
BIT 7,A
JR NZ,.LL1
ENDM
;**************************************
HD_EXP_EXE:
POP AF
CALL HD_CMD_X
JP HD_EXP_RET
HD_CMD:
POP AF
CALL HD_CMD_X
JP HD_DOS_RET
HD_CMD_X: ; C - COMAND ( 5 - RD, 6 - WR )
PUSH AF
LD A,C ; 0 - INIT, 1 - DIAG
AND A
JP Z,HD_CMD_0 ; ¨­¨æ¨ «¨§ æ¨ï
DEC A
JP Z,HD_CMD_1 ; ??
DEC A
JP Z,HD_CMD_2 ; â¥áâ
DEC A
JP Z,HD_CMD_3 ; preread
DEC A
JP Z,HD_CMD_4 ; read bpb
DEC A
JP Z,HD_CMD_5 ; read
DEC A
JP Z,HD_CMD_6 ; write
DEC A
JP Z,FN_HDD_PART
POP AF
SCF
RET
HD_BPB_PREP:
LD D,A
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(HD_IDF_ADR+12)
LD E,A
EX AF,AF'
OUT (PAGE3),A
LD A,D
LD D,0
LD IX,0
LD B,1
HD_PREPARE:
PUSH AF
PUSH HL
CALL HD_CALC_SECS
JR NC,HD_PREP_L1
POP HL
POP AF
SCF
RET
HD_PREP_L1:
LD A,B
LD BC,P_S_CNT ; “áâ ­®¢¨âì ç¨á«® ᥪâ®à®¢ ¤«ï ç⥭¨ï
OUT (C),A
LD BC,P_S_NUM
OUT (C),L ; …ŠŽ<E28099>
LD BC,P_C_LOW
OUT (C),E ; ¤®à®¦ª  low
LD BC,P_C_HIG
OUT (C),D ; ¤®à®¦ª  high
LD BC,P_HD_CS
DEC B
IN A,(C)
AND 0F0H
OR H
INC B
OUT (C),A
POP HL ; BUFER & PAGE
POP AF
AND A
RET
HD_CMD_3: ; <20>Ž„ƒŽŽŠ€ Š <>˜<E280A6>ˆŒ Ž<><EFBFBD>ˆŸŒ R/W
POP AF
AND A
INC B
DEC B
RET Z
CALL HD_WAIT
RET C
CALL HD_PREPARE
RET C
EXX
LD C,PAGE3
IN B,(C)
EXX
OUT (PAGE3),A
EX AF,AF'
LD A,0C0H
OUT (RGADR),A
LD BC,P_CMD
LD A,20H
; OUT (C),A
AND A
RET
; SCF
; RET
HD_CMD_4:
POP AF
CALL HD_WAIT
RET C
CALL HD_BPB_PREP
RET C
JR HD_RD_L1
;*******************
HD_CMD_5:
POP AF ; HL - BUFER, A - PAGE !!!
HD_RD_CMD:
AND A
INC B
DEC B
RET Z
CALL HD_WAIT
RET C
CALL HD_PREPARE
RET C
HD_RD_L1:
EXX
LD C,PAGE3
IN B,(C)
EXX
OUT (PAGE3),A
EX AF,AF'
LD A,0C0H
OUT (RGADR),A
LD BC,P_CMD
LD A,20H
OUT (C),A
HD_RD_L2:
WAIT_HDD
BIT 3,A
JR NZ,HD_READ_CONT
LD A,0
OUT (RGADR),A
HD_RET:
EXX
OUT (C),B
EXX
LD BC,P_ERR
IN A,(C)
AND A
SCF
RET NZ
EX AF,AF'
AND A
RET
HD_READ_CONT:
LD BC,P_DATS
HD_RD_CONT1:
DUP 16
INI ; ¢á¥£® 16 à § INI - ®¯â¨¬ «ì­®.
EDUP
JP NZ,HD_RD_CONT1
HD_RD_CONT2:
DUP 16
INI ; ¢á¥£® 16 à § INI - ®¯â¨¬ «ì­®.
EDUP
JP NZ,HD_RD_CONT2
; INIR
; INIR
LD A,H
OR L
JR NZ,HD_RD_L2
LD A,SYS_PAGE
OUT (PAGE3),A
EX AF,AF'
LD HL,RAMD_FAT
LD L,A
LD A,(HL)
OUT (PAGE3),A
EX AF,AF'
LD HL,0C000H
JR HD_RD_L2
;***********************************************
HD_CMD_6:
POP AF ; HL - BUFER, A - PAGE !!!
HD_WR_CMD:
AND A
INC B
DEC B
RET Z
CALL HD_WAIT
RET C
CALL HD_PREPARE
RET C
EXX
LD C,PAGE3
IN B,(C)
EXX
OUT (PAGE3),A
EX AF,AF'
LD BC,P_CMD
LD A,30H
OUT (C),A
HD_WR_L2:
WAIT_HDD
BIT 3,A
JP Z,HD_RET
;#######################################
IF HDD_TYPE
LD BC,P_DATS+100H
LD D,32
HD_WR_CONT1:
DUP 16
OUTI ; ¢á¥£® 16 à § OUTI - ®¯â¨¬ «ì­®.
EDUP
DEC D
JP NZ,HD_WR_CONT1
;#######################################
ELSE
LD D,64
LD BC,P_DATS+100H
HD_WR_LOOP:
INC HL
OUTI
DEC HL
DEC HL
OUTI
INC HL
INC HL
OUTI
DEC HL
DEC HL
OUTI
INC HL
INC HL
OUTI
DEC HL
DEC HL
OUTI
INC HL
INC HL
OUTI
DEC HL
DEC HL
OUTI
INC HL
DEC D
JR NZ,HD_WR_LOOP
ENDIF
;#######################################
LD A,H
OR L
JR NZ,HD_WR_L2
LD A,SYS_PAGE
OUT (PAGE3),A
EX AF,AF'
LD HL,RAMD_FAT
LD L,A
LD A,(HL)
OUT (PAGE3),A
EX AF,AF'
LD HL,0C000H
JR HD_WR_L2
;********************************************************
HD_CMD_1:
POP AF
HD_CMD1_EX:
ld a,0A0h
LD BC,P_HD_CS
OUT (C),A
LD A,90h ; DIAGNOSTICS
CALL HD_CMD_EXE
AND A
BIT 0,A
RET Z
LD BC,P_ERR
IN A,(C)
CP 1
RET Z
SCF
RET
;**********************************************
HD_CMD_2:
POP AF
LD E,0
LD BC,P_HD_CS
LD A,0A0H
OUT (C),A
CALL TEST_HDD_DRV
JR NZ,NO_HDD1
SET 0,E
NO_HDD1:
LD BC,P_HD_CS
LD A,0B0H
OUT (C),A
CALL TEST_HDD_DRV
JR NZ,NO_HDD2
SET 1,E
NO_HDD2:
LD A,E
AND A
SCF
RET Z ; HDD absent !
AND A
RET
TEST_HDD_DRV:
LD HL,01FEH
LD BC,P_S_CNT
OUT (C),L
LD BC,P_S_NUM
OUT (C),H
LD BC,P_S_CNT+256
IN A,(C)
CP L
RET NZ
LD BC,P_S_NUM+256
IN A,(C)
CP H
RET
HD_CMD_0:
POP AF
LD BC,P_HD_CS
LD A,0A0H
OUT (C),A
CALL TEST_HDD_DRV
JR NZ,HD_ABSENT
HD_C0_L3:
WAIT_HDD
LD BC,P_CMD
LD A,0ECH
OUT (C),A
WAIT_HDD
;HD_C0_L1:
;
; LD BC,P_HDST
; IN A,(C)
; BIT 7,A
; JR NZ,HD_C0_L1
BIT 3,A
JR NZ,HD_C0_L2
SCF
RET
HD_ABSENT:
LD BC,P_HD_CS
LD A,0B0H
OUT (C),A
CALL TEST_HDD_DRV
JR Z,HD_C0_L3
SCF
RET
HD_C0_L2:
LD BC,P_DATS
LD HL,HD_IDF_ADR
IN A,(PAGE3)
LD D,A
LD A,SYS_PAGE
OUT (PAGE3),A
INIR
INIR
;HD_C0_L4:
; LD BC,P_HDST
; IN A,(C)
; BIT 7,A
; JR NZ,HD_C0_L4
LD A,(HD_IDF_ADR+12) ; ç¨á«® ᥪâ®à®¢
LD C,A
LD B,0
LD HL,0
LD A,(HD_IDF_ADR+6) ; ç¨á«® £®«®¢®ª
LOOP_XX:
ADD HL,BC
DEC A
JR NZ,LOOP_XX
LD (HD_IDF_ADR+4),HL
WAIT_HDD
LD BC,P_HD_CS
DEC B
IN A,(C)
AND 010H
LD B,A
LD A,(HD_IDF_ADR+6) ; ç¨á«® £®«®¢®ª
DEC A
AND 0FH
OR 0A0H
OR B
LD H,A
LD A,(HD_IDF_ADR+99)
BIT 1,A
JR Z,HD_C0_NO_LBA
SET 6,H
HD_C0_NO_LBA:
LD BC,P_HD_CS
OUT (C),H
LD A,(HD_IDF_ADR+12) ; ç¨á«® ᥪâ®à®¢
LD BC,P_S_CNT
OUT (C),A
LD A,D
OUT (PAGE3),A
LD A,91H ; SET HDD PARAMETERS
CALL HD_CMD_EXE
RET
; RET C
; LD A,1FH ; RECALIBRATE
; CALL HD_CMD_EXE
; RET
HD_CMD_EXE:
CALL HD_WAIT
RET C
LD BC,P_CMD
OUT (C),A
HD_WAIT:
PUSH DE
PUSH BC
PUSH AF
LD DE,0
HD_WAIT1:
LD BC,P_HDST
IN A,(C)
BIT 7,A
JR Z,HD_W_EXIT
DEC DE
LD A,D
OR E
JR NZ,HD_WAIT1
POP AF
POP BC
POP DE
SCF
RET
HD_W_EXIT:
POP AF
POP BC
POP DE
AND A
RET
;****************************
HDD_LBA:
POP BC
LD L,E
LD E,D
DB 0DDH
LD D,L
XOR A
LD H,A
RET
HD_CALC_SECS:
DB 0DDH
LD A,H
AND A
SCF
RET NZ ; ®è¨¡ª , ᫨誮¬ ¡®«ì让 HDD..
PUSH BC
LD BC,P_HD_CS
DEC B
IN A,(C)
BIT 6,A
JR NZ,HDD_LBA
;*******************************
; IX,DE -  ¡á®«îâ­ë© ­®¬¥à ᥪâ®à 
PUSH IX
POP HL
IN A,(PAGE3)
LD C,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,C
LD (COPY_PAGE3),A
LD BC,(HD_IDF_ADR+4) ; ç¨á«® ᥪâ®à®¢ ­  樫¨­¤à¥
; HL,DE - ­®¬¥à ᥪâ®à 
; BC - ç¨á«® ᥪâ®à®¢ ­  樫¨­¤à¥
; HL,DE à §¤¥«¨âì ­  BC
LD A,16
SCF
DIV_LOOP:
EX DE,HL
ADD HL,HL
EX DE,HL
ADC HL,HL
SBC HL,BC ; áà ¢­¨âì HL ¨ BC
JR NC,NO_ADD ; ¯¥à¥­®á  ­¥ ¡ë«® - +1!
ADD HL,BC
DEC A
JR NZ,DIV_LOOP
JR DIV_END
NO_ADD: INC DE
DEC A
JR NZ,DIV_LOOP
DIV_END: ; DE - १ã«ìâ â, HL - ®áâ â®ª
; DE - 樫¨­¤à
LD A,(HD_IDF_ADR+12) ; A - ç¨á«® ᥪâ®à®¢ ­  ¤®à®¦ª¥
; HL - ­®¬¥à ᥪâ®à  ¢ 樫¨­¤à¥
LD B,0
LD C,A
; LD BC,(MS_BPB+S_P_T) ; —ˆ‘‹Ž …ŠŽ<E28099>Ž <20>€ „Ž<E2809E>ކЅ
XOR A
HD_CALC_LOOP2:
SBC HL,BC
INC A
JR NC,HD_CALC_LOOP2
DEC A ; A - £®«®¢ª 
ADD HL,BC ; L - ᥪâ®à
INC L
LD H,A ; HL - HEAD,SEC
LD A,(COPY_PAGE3)
OUT (PAGE3),A
POP BC
AND A
RET
FN_HDD_PART:
POP AF
BIT 0,A
LD A,#21 ; !HARDCODE
JR Z,.SET_CH
LD A,#01 ; !HARDCODE
.SET_CH:
OUT (#BC),A ; !HARDCODE IDE.Chanel.Choose
RET
; DB 'HDD_DRV_END'
; ‚室:
; C - ª®¬ ­¤ 
; 0 - INIT - ¢å®¤­ëå ¯ à ­¥â => A - ç¨á«® ¯®¤¤¥à¦¨¢ ¥¬ëå ¤¨áª®¢.
; 1 - RESET - ¢ë¡®à ¤¨áª  A - ­®¬¥à ¤¨áª  ®â 0 =>
; 2 - (STATUS)
; 3 - MEDIA CHECK - A - ­®¬¥à ¤¨áª  => A = 0 - old. #FF - new (¢á¥£¤  #FF)
; 4 - READ BPB - A - ¤¨áª HL -  ¤à¥á ¢ ⥪ã饩 áâà ­¨æ¥.
; 5 - READ - A - ¤¨áª, IX:DE ᥪâ®à, HL -  ¤à¥á, B - ç¨á«® ᥪâ®à®¢
; 6 - WRITE - '' -
;
; ®è¨¡ª¨ - CF - A - ®è¨¡ª 
;
; 0 - ­¥â ®è¨¡ª¨
; 1 - ­¥¢¥à­ ï ª®¬ ­¤ 
; 2 - ­¥¢¥à­ë© ­®¬¥à ¤¨áª 
; 3 - ­¥¢¥à­ë© ä®à¬ â (­¥ MS-DOS)
; 4 - ­¥â £®â®¢­®áâ¨
; 5 - ®è¨¡ª  ¯®§¨æ¨®­¨à®¢ ­¨ï
; 6 - ᥪâ®à ­¥ ­ ©¤¥­
; 7 - ®è¨¡ª  CRC
; 8 - § é¨â  § ¯¨á¨
; 9 - ®è¨¡ª  ç⥭¨ï
; 10 - ®è¨¡ª  § ¯¨á¨
; 11 - ƒ‹žŠ
;

2012
ZX_EXP/EXP_LP2.ASM Normal file

File diff suppressed because it is too large Load Diff

525
ZX_EXP/EXP_PIC2.ASM Normal file
View File

@ -0,0 +1,525 @@
;******************************************************************
PIC_FN1: ; ¢å®¤: dE - ¢¥à⨪ «ì, HL - £®à¨§®­â «ì,
; B - 梥â â®çª¨, A - íªà ­
AND A
SCF
RET NZ
IN A,(RGADR)
PUSH AF
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(WIN_MAP_IX+WIN_GRAF_Y)
ADD A,E
OUT (RGADR),A
LD A,B
LD BC,(WIN_MAP_IX+WIN_GRAF_X)
ADD HL,BC
LD B,A
LD A,50H
OUT (PAGE3),A
LD (HL),A
EX AF,AF'
OUT (PAGE3),A
POP AF
OUT (RGADR),A
RET
PIC_FN2: ; ¢å®¤: dE - ¢¥à⨪ «ì, HL - £®à¨§®­â «ì.
; IX - ¤«¨­  «¨­¨¨ ¢ â®çª å ­¥ 0 !!!
; FILL - by A
LD D,A ; ????
IN A,(PAGE1)
EX AF,AF'
LD A,B
ADD A,50H
OUT (PAGE1),A
BIT 0,B
LD BC,40H+04000H
JR Z,PIC_FN2_NO_2ND
LD BC,40H+320+04000H
PIC_FN2_NO_2ND:
ADD HL,BC
LD A,E
OUT (RGADR),A
DB 0DDH
LD A,H
AND A
JR Z,PIC_FN2_NO256
PIC_FN2_256L:
LD B,64
PIC_FN2_256:
LD (HL),D
INC HL
LD (HL),D
INC HL
LD (HL),D
INC HL
LD (HL),D
INC HL
DJNZ PIC_FN2_256
DEC A
JR NZ,PIC_FN2_256L
PIC_FN2_NO256:
DB 0DDH
LD B,L
AND A
RR B
JR NC,PIC_FN2_NO1
LD (HL),D
INC HL
AND A
PIC_FN2_NO1:
RR B
JR NC,PIC_FN2_NO2
LD (HL),D
INC HL
LD (HL),D
INC HL
AND A
PIC_FN2_NO2:
XOR A
CP B
JR Z,PIC_FN2_NO4
PIC_FN2_4:
LD (HL),D
INC HL
LD (HL),D
INC HL
LD (HL),D
INC HL
LD (HL),D
INC HL
DJNZ PIC_FN2_4
PIC_FN2_NO4:
EX AF,AF'
OUT (PAGE1),A
XOR A
OUT (RGADR),A
RET
;************************************************************************
PIC_FN3: ; ¢å®¤: dE - ¢¥à⨪ «ì, HL - £®à¨§®­â «ì.
; A',HL' -  ¤à¥á ¤ ­­ëå ¢® ¢â®à®© áâà ­¨æ¥ !
; BC' - ¤«¨­  ¤ ­­ëå
; ‚›‚Ž„ ˆ<E280B9>ˆˆ ’Ž—…Š
IN A,(PAGE3)
LD C,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,C
LD (COPY_PAGE3),A
IN A,(PAGE2)
LD (COPY_PAGE2),A
IN A,(PAGE1)
LD (COPY_PAGE1),A
LD A,B
ADD A,50H
OUT (PAGE1),A
BIT 0,B
LD BC,40H+04000H
JR Z,PIC_FN3_NO_2ND
LD BC,40H+320+04000H
PIC_FN3_NO_2ND:
ADD HL,BC
LD A,E
OUT (RGADR),A
LD A,H
EXX
LD D,A
EXX
LD A,L
EXX
LD E,A
EXX
EX AF,AF'
OUT (PAGE2),A
EX AF,AF'
LD HL,RAMD_FAT
LD L,A
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(HL)
OUT (PAGE3),A
EXX
LDIR
BIT 6,H
JR Z,PIC_FN3_NO
RES 6,H
EX AF,AF'
PIC_FN3_NO:
EXX
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(COPY_PAGE1)
OUT (PAGE1),A
LD A,(COPY_PAGE2)
OUT (PAGE2),A
LD A,(COPY_PAGE3)
OUT (PAGE3),A
XOR A
OUT (RGADR),A
RET
;**************************************************************************
PIC_FN4: ; ¢å®¤: HL - ¤ ­­ë¥ ¯ «¨âàë RGB, E - ­ ç «ì­ë© 梥â
; D - ç¨á«® 梥⮢, B - PAL-mask, A - page PAL
PUSH IX
EX AF,AF'
IN A,(RGADR)
PUSH AF ; á®åà ­¨âì ¯®«®¦¥­¨¥ RGADR
LD A,E
OUT (RGADR),A ; ­ ç «ì­ë© 梥⠢ ¯®àâ
LD A,D ; á®åà ­¨âì ç¨á«® 梥⮢
EX AF,AF' ; ¢¥à­ãâì áâà ­¨æã PAL
BIT 7,H ; ¯à®¢¥à¨âì  ¤à¥á ¤ ­­ëå
LD C,PAGE3 ; ¥á«¨ ­¨¦¥ 8000h
LD D,0C3H ; â® £à ä.íªà ­ ­  áâà ­¨æ¥ 3
JR Z,PIC_FN4_NO_PAGE1
LD D,043H ; ¨­ ç¥
LD C,PAGE1 ; ­  áâà ­¨æ¥ 1
PIC_FN4_NO_PAGE1:
ADD A,A
;JR C,PIC_PAL_READ
ADD A,A
AND 1CH
XOR 0E0H ; ¬« ¤è¨© ¡ ©â  ¤à¥á  PAL
LD E,A ; DE -  ¤à¥á ¢ ¢¨¤¥®-އ“
PUSH DE
POP IX ;  ¤à¥á ¯ «¨âàë
LD D,B ; ¬ áª  PAL
EX AF,AF' ; ¢¥à­ãâì ç¨á«® 梥⮢
LD B,A ; ç¨á«® 梥⮢
IN E,(C) ; á®åà ­¨âì áâà ­¨æã 3
LD A,50H ; áâà ­¨æ  £à ä¨ç¥áª®£® RAM
OUT (C),A
PIC_FN4_L1: ; 横« ãáâ ­®¢ª¨ 梥⮢ ¯ «¨âàë
LD A,(HL) ; B
AND D
LD (IX+2),A
INC HL
LD A,(HL) ; G
AND D
LD (IX+1),A
INC HL
LD A,(HL) ; R
AND D
LD (IX+0),A
INC HL
LD A,(HL) ; Y
AND D
LD (IX+3),A
INC HL
IN A,(RGADR)
INC A
OUT (RGADR),A
DJNZ PIC_FN4_L1 ; ¢ë¯®«­ïâì, ¯®ª  ­¥ 0
OUT (C),E ; ¢®ááâ ­®¢¨âì áâà ­¨æã 3
POP AF
OUT (RGADR),A ; ¢®ááâ ­®¢¨âì Y_PORT
POP IX
;AND A
RET
; PIC_PAL_READ:
; ADD A,A
; AND 1CH
; XOR 0E0H ; ¬« ¤è¨© ¡ ©â  ¤à¥á  PAL
; LD E,A ; DE -  ¤à¥á ¢ ¢¨¤¥®-އ“
; PUSH DE
; POP IX ;  ¤à¥á ¯ «¨âàë
; LD D,B ; ¬ áª  PAL
; EX AF,AF' ; ¢¥à­ãâì ç¨á«® 梥⮢
; LD B,A ; ç¨á«® 梥⮢
; IN E,(C) ; á®åà ­¨âì áâà ­¨æã 3
; LD A,50H ; áâà ­¨æ  £à ä¨ç¥áª®£® RAM
; OUT (C),A
; PIC_FN4_L2: ; 横« ãáâ ­®¢ª¨ 梥⮢ ¯ «¨âàë
; LD A,(IX+2)
; LD (HL),A ; B
; INC HL
; LD A,(IX+1)
; LD (HL),A ; G
; INC HL
; LD A,(IX+0)
; LD (HL),A ; R
; INC HL
; LD A,(IX+3)
; LD (HL),A ; Y
; INC HL
; IN A,(RGADR)
; INC A
; OUT (RGADR),A
; DJNZ PIC_FN4_L2 ; ¢ë¯®«­ïâì, ¯®ª  ­¥ 0
; OUT (C),E ; ¢®ááâ ­®¢¨âì áâà ­¨æã 3
; POP AF
; OUT (RGADR),A ; ¢®ááâ ­®¢¨âì Y_PORT
; POP IX
; AND A
; RET
;********************************************************************
PIC_FN5: ; “<E28099>ŽŠ€ <E28098><EFBFBD>ˆ MODE
LD A,E
AND 1
OUT (RGMOD),A
RET
;*******************************************************************
PIC_FN6: ; A - page_pal, E - ­®¬¥à ¯ «¨âàë, B - ⨯ ¯ «¨âàë
LD D,A
DEC B
JP Z,SET_PAL_GRAF
DEC B
JP Z,SET_PAL_ZX
; DEC B
; JP Z,SET_PAL_IBM
; LD IX,PAL_DAT1
; JR Z,PIC_FN6_L1
; DEC B
; LD IX,PAL_DAT
; JR Z,PIC_FN6_L1
SCF
RET
;PIC_FN6_L1:
; AND 3
; ADD A,A
; ADD A,A
; ADD A,0E0H
; LD L,A
; LD H,43H
; IN A,(PAGE1)
; PUSH AF
;
; LD A,50H
; OUT (PAGE1),A
; XOR A
; OUT (RGADR),A
; EX AF,AF'
; call PAL_LOOP_M
;
; POP AF
; OUT (PAGE1),A
; XOR A
; OUT (RGADR),A
;
; RET
;******************************************************************
PIC_FN7: ; <20>¨á®¢ ­¨¥ «¨­¨¨. d… - ¢¥à⨪ «ì, HL - £®à¨§®­â «ì
; H' - ¢ëá®â , C'/DE',B' - add_parameters
; A - color
LD D,A
IN A,(PAGE1)
PUSH AF
LD A,B
ADD A,50H
OUT (PAGE1),A
BIT 0,B
LD BC,40H+04000H
JR Z,PIC_FN7_NO_2ND
LD BC,40H+320+04000H
PIC_FN7_NO_2ND:
ADD HL,BC
LD A,E
PIC_FN7_L1:
OUT (RGADR),A ; áâà ­¨æ  ¢¨¤¥®-އ“
LD (HL),D
EXX
EX AF,AF'
DEC H
JR Z,PIC_FN7_EXIT
LD A,C ; NEXT HORIZONTAL
ADD A,B
LD C,A
LD A,E
EXX
ADC A,L
LD L,A
EXX
LD A,D
EXX
ADC A,H
LD H,A
INC E ; NEXT VERTICAL
EX AF,AF'
INC A
JR PIC_FN7_L1
PIC_FN7_EXIT:
EXX
POP AF
OUT (PAGE1),A
XOR A
OUT (RGADR),A
RET
;******************************************************************
PIC_FN8: ; <20>¨á®¢ ­¨¥ «¨­¨¨. d… - ¢¥à⨪ «ì, HL - £®à¨§®­â «ì
; H' - ¢ëá®â , C'/DE',B' - add_parameters
; (IX) - color
IN A,(PAGE1)
PUSH AF
LD A,B
ADD A,50H
OUT (PAGE1),A
BIT 0,B
LD BC,40H+04000H
JR Z,PIC_FN8_NO_2ND
LD BC,40H+320+04000H
PIC_FN8_NO_2ND:
ADD HL,BC
LD A,E
PIC_FN8_L1:
OUT (RGADR),A ; áâà ­¨æ  ¢¨¤¥®-އ“
LD D,(IX)
INC IX
LD (HL),D
EXX
EX AF,AF'
DEC H
JR Z,PIC_FN8_EXIT
LD A,C ; NEXT HORIZONTAL
ADD A,B
LD C,A
LD A,E
EXX
ADC A,L
LD L,A
EXX
LD A,D
EXX
ADC A,H
LD H,A
INC E ; NEXT VERTICAL
EX AF,AF'
INC A
JR PIC_FN8_L1
PIC_FN8_EXIT:
EXX
POP AF
OUT (PAGE1),A
XOR A
OUT (RGADR),A
RET
;**************************************************
; ‚뢮¤ á¯à ©â  ­  íªà ­
PIC_FN9: ; HL - £®à¨§®â «ì, dE - ¢¥à⨪ «ì
; A',HL' -  ¤à¥á ¤ ­­ëå
;*********************************
PIC_FN10: ; HL,E - ª®®à¤¨­ âë D - color
; B - Magnify
PIC_FN11:
PIC_FN12:
PIC_FN13:
PIC_FN14:
PIC_FN15:
SCF
RET
;************************************
;
; <20>ªà ­­ë¥ â ¡«¨æë
; LP_SCR_80:
; DB 40,32,0,0,1BH,0,0,0
; DB 0,0,0,0,0,0,0,0
; ;
; LP_SCR_40:
; DB 40,32,0,0,7BH,0,0,0
; DB 0,0,0,0,0,0,0,0
; LP_SCR_32:
; DB 32,24,4,4,30H,1,0,0
; DB 0,0,0,0,0,0,0,0
; LP_SCR_64:
; DB 32,24,4,4,9BH,0,0,0
; DB 0,0,0,0,0,0,0,0
; PIC_320X256_1:
; DB 40,32,0,0,20H,0,8,0
; DB 0,0,0,0,0,0,0,0
; ;
; PIC_320X256_2:
; DB 40,32,0,0,60H,0,48,0
; DB 0,0,0,0,0,0,0,0
; ;************************************
;

289
ZX_EXP/EXP_SCR.ASM Normal file
View File

@ -0,0 +1,289 @@
;*****************************************************
;
; <20>ªà ­­ë¥ â ¡«¨æë
; ’ ¡«¨æë à á¯®«®¦¥­¨ï ¤ ­­ëå !!!
;
;*****************************************************
; byte 1
; 0..4 - VIDEO_PAGE
; 5 - mode 42/84 ; 0 - 42,1 - 84
; 6 - next line
; 7 - end table
; byte 2 - number of places
; byte 3..4 - adress places/
; 4000-5FFF - Spectrum modes/ C000-FFFF - Graf mode
;
LP_S MACRO PG,XX,ADR
DEFB PG,XX
DEFW ADR
ENDM
;*********************************
; BYTE 0 - ¡¨â 7 - ª®­¥æ áâப¨, ®áâ «ì­®¥ - ०¨¬ íªà ­ 
; BYTE 1 - ç¨á«® áâப
; BYTE 2,3 -  ¤à¥á «¨­¨¨
PIC_S MACRO pg,cnt,adr
DB pg
DB cnt
DW adr
ENDM
ALIGN 8
LP_SCR_MNU:
;
; LP_S 040h,14,040E7H
;
; LP_S 040h,14,04807H
; LP_S 040h,14,04827H
; LP_S 040h,14,04847H
; LP_S 040h,14,04867H
; LP_S 040h,14,04887H
; LP_S 040h,14,048A7H
; LP_S 040h,14,048C7H
; LP_S 040h,14,048E7H
;
; DEFB 0FFh,0,0,0
LP_SCR_80:
DB 40,32,0,0,1BH,0,0,0
DB 0,0,0,0,0,0,0,0
; LP_S 01100010B,40,4000H
; LP_S 01100010B,40,4028H
; LP_S 01100010B,40,4050H
; LP_S 01100010B,40,4078H
; LP_S 01100010B,40,40A0H
; LP_S 01100010B,40,40C8H
;
; LP_S 01100010B,40,4800H
; LP_S 01100010B,40,4828H
; LP_S 01100010B,40,4850H
; LP_S 01100010B,40,4878H
; LP_S 01100010B,40,48A0H
; LP_S 01100010B,40,48C8H
;
; LP_S 01100010B,40,5000H
; LP_S 01100010B,40,5028H
; LP_S 01100010B,40,5050H
; LP_S 01100010B,40,5078H
; LP_S 01100010B,40,50A0H
; LP_S 01100010B,40,50C8H
;
; LP_S 01100100B,40,4000H
; LP_S 01100100B,40,4028H
; LP_S 01100100B,40,4050H
; LP_S 01100100B,40,4078H
; LP_S 01100100B,40,40A0H
; LP_S 01100100B,40,40C8H
;
; LP_S 01100100B,40,4800H
; LP_S 01100100B,40,4828H
; LP_S 01100100B,40,4850H
; LP_S 01100100B,40,4878H
; LP_S 01100100B,40,48A0H
; LP_S 01100100B,40,48C8H
;
; LP_S 01100100B,40,5000H
; LP_S 01100100B,40,5028H
;
; DEFB 0FFh,0,0,0
;
LP_SCR_40:
DB 40,32,0,0,7BH,0,0,0
DB 0,0,0,0,0,0,0,0
;
; LP_S 01000100B,40,5050H
; LP_S 01000100B,40,5078H
; LP_S 01000100B,40,50A0H
; LP_S 01000100B,40,50C8H
;
; LP_S 01000110B,40,4000H
; LP_S 01000110B,40,4028H
; LP_S 01000110B,40,4050H
; LP_S 01000110B,40,4078H
; LP_S 01000110B,40,40A0H
; LP_S 01000110B,40,40C8H
;
; LP_S 01000110B,40,4800H
; LP_S 01000110B,40,4828H
; LP_S 01000110B,40,4850H
; LP_S 01000110B,40,4878H
; LP_S 01000110B,40,48A0H
; LP_S 01000110B,40,48C8H
;
; LP_S 01000110B,40,5000H
; LP_S 01000110B,40,5028H
; LP_S 01000110B,40,5050H
; LP_S 01000110B,40,5078H
; LP_S 01000110B,40,50A0H
; LP_S 01000110B,40,50C8H
;
; LP_S 01001000B,40,4000H
; LP_S 01001000B,40,4028H
; LP_S 01001000B,40,4050H
; LP_S 01001000B,40,4078H
; LP_S 01001000B,40,40A0H
; LP_S 01001000B,40,40C8H
;
; LP_S 01001000B,40,4800H
; LP_S 01001000B,40,4828H
; LP_S 01001000B,40,4850H
; LP_S 01001000B,40,4878H
;
; DEFB 0FFh,0,0,0
;
LP_SCR_32:
DB 32,24,4,4,30H,1,0,0
DB 0,0,0,0,0,0,0,0
;
; LP_S 040h,32,04000H
; LP_S 040h,32,04020H
; LP_S 040h,32,04040H
; LP_S 040h,32,04060H
; LP_S 040h,32,04080H
; LP_S 040h,32,040A0H
; LP_S 040h,32,040C0H
; LP_S 040h,32,040E0H
;
; LP_S 040h,32,04800H
; LP_S 040h,32,04820H
; LP_S 040h,32,04840H
; LP_S 040h,32,04860H
; LP_S 040h,32,04880H
; LP_S 040h,32,048A0H
; LP_S 040h,32,048C0H
; LP_S 040h,32,048E0H
;
; LP_S 040h,32,05000H
; LP_S 040h,32,05020H
; LP_S 040h,32,05040H
; LP_S 040h,32,05060H
; LP_S 040h,32,05080H
; LP_S 040h,32,050A0H
; LP_S 040h,32,050C0H
; LP_S 040h,32,050E0H
;
; LP_S 0FFh,0,0
;
LP_SCR_64:
DB 32,24,4,4,9BH,0,0,0
DB 0,0,0,0,0,0,0,0
;
; LP_S 06Ah,32,04000H
; LP_S 06Ah,32,04020H
; LP_S 06Ah,32,04040H
; LP_S 06Ah,32,04060H
; LP_S 06Ah,32,04080H
; LP_S 06Ah,32,040A0H
; LP_S 06Ah,32,040C0H
; LP_S 06Ah,32,040E0H
;
; LP_S 06Ah,32,04800H
; LP_S 06Ah,32,04820H
; LP_S 06Ah,32,04840H
; LP_S 06Ah,32,04860H
; LP_S 06Ah,32,04880H
; LP_S 06Ah,32,048A0H
; LP_S 06Ah,32,048C0H
; LP_S 06Ah,32,048E0H
;
; LP_S 06Ah,32,05000H
; LP_S 06Ah,32,05020H
; LP_S 06Ah,32,05040H
; LP_S 06Ah,32,05060H
; LP_S 06Ah,32,05080H
; LP_S 06Ah,32,050A0H
; LP_S 06Ah,32,050C0H
; LP_S 06Ah,32,050E0H
;
; LP_S 0FFh,0,0
PIC_320X256_1:
DB 40,32,0,0,20H,0,8,0
DB 0,0,0,0,0,0,0,0
;
; PIC_S 020H,40,4040H
; PIC_S 028H,40,4040H
; PIC_S 020H,40,4440H
; PIC_S 028H,40,4440H
; PIC_S 020H,40,4840H
; PIC_S 028H,40,4840H
; PIC_S 020H,40,4C40H
; PIC_S 028H,40,4C40H
;
; PIC_S 020H,40,5040H
; PIC_S 028H,40,5040H
; PIC_S 020H,40,5440H
; PIC_S 028H,40,5440H
; PIC_S 020H,40,5840H
; PIC_S 028H,40,5840H
; PIC_S 020H,40,5C40H
; PIC_S 028H,40,5C40H
;
; PIC_S 020H,40,6040H
; PIC_S 028H,40,6040H
; PIC_S 020H,40,6440H
; PIC_S 028H,40,6440H
; PIC_S 020H,40,6840H
; PIC_S 028H,40,6840H
; PIC_S 020H,40,6C40H
; PIC_S 028H,40,6C40H
;
; PIC_S 020H,40,7040H
; PIC_S 028H,40,7040H
; PIC_S 020H,40,7440H
; PIC_S 028H,40,7440H
; PIC_S 020H,40,7840H
; PIC_S 028H,40,7840H
; PIC_S 020H,40,7C40H
; PIC_S 028H,40,7C40H
;
; PIC_S 0FFH,0,0
;
PIC_320X256_2:
DB 40,32,0,0,60H,0,48,0
DB 0,0,0,0,0,0,0,0
; PIC_S 060H,40,4180H
; PIC_S 068H,40,4180H
; PIC_S 060H,40,4580H
; PIC_S 068H,40,4580H
; PIC_S 060H,40,4980H
; PIC_S 068H,40,4980H
; PIC_S 060H,40,4D80H
; PIC_S 068H,40,4D80H
;
; PIC_S 060H,40,5180H
; PIC_S 068H,40,5180H
; PIC_S 060H,40,5580H
; PIC_S 068H,40,5580H
; PIC_S 060H,40,5980H
; PIC_S 068H,40,5980H
; PIC_S 060H,40,5D80H
; PIC_S 068H,40,5D80H
;
; PIC_S 060H,40,6180H
; PIC_S 068H,40,6180H
; PIC_S 060H,40,6580H
; PIC_S 068H,40,6580H
; PIC_S 060H,40,6980H
; PIC_S 068H,40,6980H
; PIC_S 060H,40,6D80H
; PIC_S 068H,40,6D80H
;
; PIC_S 060H,40,7180H
; PIC_S 068H,40,7180H
; PIC_S 060H,40,7580H
; PIC_S 068H,40,7580H
; PIC_S 060H,40,7980H
; PIC_S 068H,40,7980H
; PIC_S 060H,40,7D80H
; PIC_S 068H,40,7D80H
;
; PIC_S 0FFH,0,0
;
;
;

679
ZX_EXP/FLEX.ASM Normal file
View File

@ -0,0 +1,679 @@
SYCLES EQU 0
START EQU 1
ST1 EQU 2
DPAL1 EQU 3
ST2 EQU 4
DPAL2 EQU 5
NEXT_LIN_H MACRO
EX AF,AF'
INC A
OUT (RGADR),A
EX AF,AF'
ENDM
NEXT_LIN_HP MACRO
local MD_NO_INC_H
EX AF,AF'
INC A
OUT (RGADR),A
JR NZ,MD_NO_INC_H
inc l
MD_NO_INC_H:
EX AF,AF'
ENDM
;*****************************************
;
; ˆ­¨æ¨ «¨§ æ¨ï áâà ­¨æ ¤«ï
; ᯥªâà㬮¢áª®£® ०¨¬  ¨
; ¢®ááâ ­®¢«¥­¨¥ ᯥªâà㬮¢áª®£®
; íªà ­ 
;
; ‚®§¢à â ¯® IX
;
; !!! NO USE STACK !!!
;
;*****************************************
INIT_PAGES:
AND A
LD E,A
EX AF,AF'
LD A,E
; BIT 7,A
; JR Z,SCORPION_256_MODE
; BIT 6,A
; JR Z,PENTAGON_128_MODE
;
;PENTAGON_48_MODE:
; AND 03CH
; OUT (PAGE0),A
; INC A
; OUT (PAGE1),A
; INC A
; OUT (PAGE2),A
; INC A
; LD D,A
; LD BC,1FFDH
; XOR A
; OUT (C),A
; LD B,7FH
; OUT (C),A
; LD A,D
; OUT (PAGE3),A
; JR INIT_VIDEO_REG
;
;PENTAGON_128_MODE:
; LD D,8
; AND 038H
; JR ALL_MODE
SCORPION_256_MODE:
LD D,16
AND 030H ; ¤® 4-å ᯥªâà㬮¢
ALL_MODE:
OUT (PAGE0),A
XOR 5
OUT (PAGE1),A
XOR 7
OUT (PAGE2),A
OR 0FH
LD E,A
D_P2:
DEC D
LD A,D
RLCA
AND 10H
LD BC,01FFDH
OUT (C),A
LD A,D
AND 7
OR 40H
LD B,7FH
OUT (C),A
LD A,E
OUT (PAGE3),A
DEC E
DEC D
INC D
JR NZ,D_P2
INIT_VIDEO_REG:
XOR A
OUT (RGADR),A ; ॣ¨áâà ¢¨¤¥®  ¤à¥á 
; OUT (RGSCR),A ; ॣ¨áâà íªà ­ 
OUT (RGMOD),A ; ॣ¨áâà ¬®¤ë
LD HL,04000H
LD DE,04000H
LD BC,01B00H
LDIR ; Restore old Spectrum Screen
EX AF,AF'
BIT 6,A
JR NZ,NO_SCREEN_ALT
EX AF,AF'
LD A,7 ; ᥤ쬠ï íªà ­­ ï áâà ­¨æ 
LD BC,7FFDH
OUT (C),A
LD HL,0C000H
LD DE,0C000H
LD BC,01B00H
LDIR ; Restore old Spectrum Screen
XOR A
LD BC,7FFDH
OUT (C),A
EX AF,AF'
NO_SCREEN_ALT:
AND A
JP (IX)
;****************************************
; ‡ £à㧪  ०¨¬  íªà ­ .
;****************************************
; CALL SINC_DEF
; CALL SET_PAL_ZX
; RET
;****************************************
;****************************************
;****************************************
;****************************************
CL0 EQU 200
CL1 EQU 240
; SET_PAL_IBM:
; LD DE,08000h
; JR SET_PAL_
SET_PAL_ZX:
;SET_PAL_:
PUSH IX
IN A,(RGADR)
PUSH AF
IN A,(PAGE3)
EX AF,AF'
LD A,50H
OUT (PAGE3),A
LD DE,0
LD IX,0C3F0H
SET_PAL_ZX1:
CALL GENERATE_PAL1
LD A,E
OUT (RGADR),A
LD (IX),L
LD (IX+1),B
LD (IX+2),C
LD (IX+3),H
INC E
JR NZ,SET_PAL_ZX1
LD BC,4
ADD IX,BC
INC D
LD A,D
CP 04
JR NZ,SET_PAL_ZX1
EX AF,AF'
OUT (PAGE3),A
POP AF
OUT (RGADR),A
POP IX
RET
; £¥­¥à æ¨ï ᯥªâà㬮¢áª®© ¯ «¨âàë.
GENERATE_PAL1: ; E -  âਡãâ, D - ­®¬¥à PAL
; ; ‚›•Ž„ - C - BLUE, L - RED, B - GREEN, H - INTENSITY
;
XOR A
LD C,A
LD B,A
LD L,A
; BIT 7,D
; JR NZ,GENERATE_IBM
BIT 1,D
JR NZ,GEM_PAL_FLH
GEM_PAL_NOF:
BIT 0,D
JR Z,GEN_PAL_PAP
GEN_PAL_INK:
LD A,CL0
BIT 6,E
JR Z,GEN_PAL_NOI1
LD A,CL1
GEN_PAL_NOI1:
BIT 0,E ; BLUE
JR Z,GEN_PP_NO1
LD C,A
GEN_PP_NO1:
BIT 1,E ; RED
JR Z,GEN_PP_NO2
LD L,A
GEN_PP_NO2:
BIT 2,E ; GREEN
JR Z,GEN_PP_NO3
LD B,A
GEN_PP_NO3:
JR GEN_PP_NO6
GEM_PAL_FLH:
BIT 7,E
JR Z,GEM_PAL_NOF
BIT 0,D
JR Z,GEN_PAL_INK
GEN_PAL_PAP:
LD A,CL0
BIT 6,E
JR Z,GEN_PAL_NOI2
LD A,CL1
GEN_PAL_NOI2:
BIT 3,E ; BLUE
JR Z,GEN_PP_NO4
LD C,A
GEN_PP_NO4:
BIT 4,E ; RED
JR Z,GEN_PP_NO5
LD L,A
GEN_PP_NO5:
BIT 5,E ; GREEN
JR Z,GEN_PP_NO6
LD B,A
GEN_PP_NO6:
LD A,C
AND A
RRA
ADD A,L
RRA
ADD A,B
RRA
LD H,A ; B/W mode
RET
;****************************************
; GENERATE_IBM:
; BIT 7,E
; JR Z,GEN_IBM_NO_FLH
; BIT 1,D
; JR Z,GEN_IBM_PAPER
; GEN_IBM_NO_FLH:
; BIT 0,D
; JR Z,GEN_IBM_PAPER
; GEN_IBM_INK:
; GEN_NO_INTENS:
; LD A,0A8h
; GEN_INTENS:
; BIT 0,E ; BLUE
; JR Z,GEN_PPI_NO4
; LD C,A
; GEN_PPI_NO4:
; BIT 2,E ; RED
; JR Z,GEN_PPI_NO5
; LD L,A
; GEN_PPI_NO5:
; BIT 1,E ; GREEN
; JR Z,GEN_PPI_NO6
; LD B,A
; GEN_PPI_NO6:
; LD A,E
; AND 0Fh
; CP 6
; JR NZ,no_correct
; LD B,54h
; no_correct:
; BIT 3,E
; JR Z,GEN_PP_NO6
; LD A,54h
; ADD A,C
; LD C,A
; LD A,54h
; ADD A,B
; LD B,A
; LD A,54h
; ADD A,L
; LD L,A
; JR GEN_PP_NO6
; GEN_IBM_PAPER:
; LD A,0A8h
; BIT 4,E ; BLUE
; JR Z,GEN_PPI_NO4X
; LD C,A
; GEN_PPI_NO4X:
; BIT 6,E ; RED
; JR Z,GEN_PPI_NO5X
; LD L,A
; GEN_PPI_NO5X:
; BIT 5,E ; GREEN
; JR Z,GEN_PPI_NO6X
; LD B,A
; GEN_PPI_NO6X:
; LD A,E
; AND 070h
; CP 60h
; JR NZ,no_correct2
; LD B,54h
; no_correct2:
; JR GEN_PP_NO6
;****************************************
;****************************************
;****************************************
SET_PAL_GRAF: ; D - ­®¬¥à £à ä¨ç¥áª®© ¯ «¨âàë
PUSH IX
IN A,(RGADR)
PUSH AF
IN A,(PAGE3)
EX AF,AF'
LD A,50H
OUT (PAGE3),A
LD IX,0C3E0H
LD A,D
AND 3
ADD A,A
ADD A,A
LD E,A
LD D,0
ADD IX,DE
LD E,0
XOR A
LD B,A
LD C,A
LD L,A
LD H,A
SET_PAL_GR1:
LD A,E
OUT (RGADR),A
LD (IX),L
LD (IX+1),B
LD (IX+2),C
LD (IX+3),H
CALL GENERATE_PAL3
INC E
LD A,E
CP 40
JR NZ,SET_PAL_GR1
XOR A
LD B,A
LD C,A
LD L,A
LD H,A
SET_PAL_GR2:
LD A,E
OUT (RGADR),A
LD (IX),L
LD (IX+1),B
LD (IX+2),C
LD (IX+3),H
CALL GENERATE_PAL2
INC E
JR NZ,SET_PAL_GR2
EX AF,AF'
OUT (PAGE3),A
POP AF
OUT (RGADR),A
POP IX
RET
;
;;*********************************
;
GENERATE_PAL3: ; gray-scale
LD A,B
ADD A,6
LD B,A
LD C,A
LD L,A
LD A,C
AND A
RRA
ADD A,L
RRA
ADD A,B
RRA
LD H,A
RET
GENERATE_PAL2: ; C - BLUE; L - RED; B - GREEN; H - INTENSITY
LD A,C
ADD A,50
LD C,A
JR NC,GEN_PAL2_L1
LD C,0
LD A,L
ADD A,50
LD L,A
JR NC,GEN_PAL2_L1
LD L,0
LD A,B
ADD A,50
LD B,A
JR NC,GEN_PAL2_L1
LD B,0
GEN_PAL2_L1:
LD A,C
AND A
RR A
ADD A,L
RR A
ADD A,B
RR A
LD H,A
RET
;
;;*****************************************
SINC_DEF:
LD C,PAGE3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD HL,(CONFIG_ALL)
OUT (C),B
LD DE,L_PENTAGON
AND A
SBC HL,DE
JR Z,PENT_SINC
LD IX,L_SCORPION
; AND A
; SBC HL,DE
; JR Z,SCOR_SINC
; ORIG_SINC:
; LD IX,L_ORIGINAL
; JR PROG_SCR
SCOR_SINC:
;LD IX,L_SCORPION
JR PROG_SCR
PENT_SINC:
LD IX,L_PENTAGON
JR PROG_SCR
FN_SINC:
AND A
JR Z,SINC_DEF
DEC A
LD IX,L_SCORPION
JR Z,PROG_SCR
DEC A
LD IX,L_PENTAGON
JR Z,PROG_SCR
; DEC A
; JR Z,ORIG_SINC
SCF
RET
PROG_SCR:
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
EX AF,AF'
LD (COPY_PAGE3),A
IN A,(RGADR)
LD (COPY_RGADR),A
LD (CONFIG_ALL),IX
LD A,0
MM_LOOP7:
OUT (RGADR),A
EX AF,AF'
LD A,#50
OUT (PAGE3),A
LD HL,#C300
MM_LOOP6:
LD C,(IX)
MM_LOOP4:
LD E,(IX+1)
LD D,(IX+2)
MM_LOOP5:
LD A,(DE)
INC DE
AND A
JR Z,MM_EXIT_1
LD B,A
LD A,(DE)
INC DE
MM_LOOP3:
LD (HL),A
INC L
LD (HL),0
INC L
LD (HL),0
EX AF,AF'
INC A
OUT (RGADR),A
EX AF,AF'
LD (HL),0
DEC L
LD (HL),0
DEC L
LD (HL),A
EX AF,AF'
INC A
OUT (RGADR),A
EX AF,AF'
DJNZ MM_LOOP3
JR MM_LOOP5
MM_EXIT_1:
INC HL ; next line
INC HL
INC HL
INC HL
IN A,(RGADR)
AND 80H
OUT (RGADR),A
DEC C
JR NZ,MM_LOOP4
INC IX
INC IX
INC IX
LD A,(IX)
AND A
JR NZ,MM_LOOP6
LD A,SYS_PAGE
OUT (PAGE3),A
LD IX,(CONFIG_ALL)
EX AF,AF'
ADD A,80H
JR NC,MM_LOOP7
LD A,(COPY_RGADR)
OUT (RGADR),A
LD A,(COPY_PAGE3)
OUT (PAGE3),A
RET
;L_SCR: DB 41,38H,3,3CH,4,3CH,7,3CH,9,38H,0
;L_INT: DB 42,3CH,1,3DH,5,3CH,7,3CH,9,3CH,0
;L_INT2: DB 41,38H,1,3DH,6,3CH,7,3CH,9,38H,0
;L_BLN: DB 41,3CH,3,3CH,4,3CH,7,3CH,9,3CH,0
;L_SNC: DB 41,3CH,3,3CH,4,3CH,7,3CH,9,3CH,0
;L_RES: DB 41,38H,3,3EH,4,3EH,7,3EH,9,38H,0
L_SCR: DB 41,0F8H,3,0FCH,4,0FCH,7,0FCH,9,0F8H,0
L_INT: DB 40,0FCH,2,0FDH,6,0FCH,7,0FCH,9,0FCH,0
L_INT2: DB 41,0F8H,1,0FDH,6,0FCH,7,0FCH,9,0F8H,0
L_BLN: DB 41,0FCH,3,0FCH,4,0FCH,7,0FCH,9,0FCH,0
L_SNC: DB 41,0FCH,3,0FCH,4,0FCH,7,0FCH,9,0FCH,0
L_RES: DB 41,0F8H,3,0FEH,4,0FEH,7,0FEH,9,0F8H,0
L_PENTAGON:
DB 33
DW L_SCR
DB 1
; DW L_BLN
DW L_INT
DB 3
DW L_SNC
DB 1
DW L_BLN
DB 1
DW L_SCR
DB 1
DW L_RES
DB 0
L_SCORPION:
DB 31
DW L_SCR
DB 1
DW L_INT2
DB 1
DW L_SCR
DB 1
DW L_SNC
DB 3
DW L_SNC
DB 1
DW L_BLN
DB 2
DW L_RES
DB 0
; L_ORIGINAL:
; DB 33
; DW L_SCR
; DB 1
; DW L_SNC
; DB 1
; DW L_INT
; DB 2
; DW L_SNC
; DB 1
; DW L_BLN
; DB 1
; DW L_SCR
; DB 1
; DW L_RES
DB 0
FLEX_END:

151
ZX_EXP/FONT.ASM Normal file
View File

@ -0,0 +1,151 @@
ZG_ADRESS:
DB 000h,07Eh,07Eh,06Ch,010h,038h,010h,000h,0FFh,000h,0FFh,00Fh,03Ch,03Fh,07Fh,018h
DB 080h,002h,018h,066h,07Fh,03Eh,000h,018h,018h,018h,000h,000h,000h,000h,000h,000h
DB 000h,030h,06Ch,06Ch,030h,000h,038h,060h,018h,060h,000h,000h,000h,000h,000h,006h
DB 07Ch,030h,078h,078h,01Ch,0FCh,038h,0FCh,078h,078h,000h,000h,018h,000h,060h,078h
DB 07Ch,030h,0FCh,03Ch,0F8h,0FEh,0FEh,03Ch,0CCh,078h,01Eh,0E6h,0F0h,0C6h,0C6h,038h
DB 0FCh,078h,0FCh,078h,0FCh,0CCh,0CCh,0C6h,0C6h,0CCh,0FEh,078h,0C0h,078h,010h,000h
DB 030h,000h,0E0h,000h,01Ch,000h,038h,000h,0E0h,030h,00Ch,0E0h,070h,000h,000h,000h
DB 000h,000h,000h,000h,010h,000h,000h,000h,000h,000h,000h,01Ch,018h,0E0h,076h,000h
DB 00Eh,0FCh,0F8h,0FCh,07Eh,0FCh,0DBh,03Ch,0C6h,0D6h,0C6h,006h,0C6h,0C6h,07Ch,0FEh
DB 0FCh,07Ch,0FCh,0C6h,018h,0C3h,0CCh,0C6h,0D6h,0D6h,0F0h,0C2h,0C0h,07Ch,0CEh,07Eh
DB 000h,004h,000h,000h,000h,000h,000h,000h,000h,030h,000h,000h,000h,000h,000h,000h
DB 022h,055h,0DBh,010h,010h,010h,014h,000h,000h,014h,014h,000h,014h,014h,010h,000h
DB 010h,010h,000h,010h,000h,010h,010h,014h,014h,000h,014h,000h,014h,000h,014h,010h
DB 014h,000h,000h,014h,010h,000h,000h,014h,010h,010h,000h,0FFh,000h,0F0h,00Fh,0FFh
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 048h,048h,060h,018h,008h,010h,030h,000h,060h,000h,000h,01Fh,0A0h,060h,000h,000h
DB 000h,081h,0FFh,0FEh,038h,07Ch,010h,000h,0FFh,03Ch,0C3h,007h,066h,033h,063h,0DBh
DB 0E0h,00Eh,03Ch,066h,0DBh,063h,000h,03Ch,03Ch,018h,018h,030h,000h,024h,018h,0FFh
DB 000h,078h,06Ch,06Ch,07Ch,0C6h,06Ch,060h,030h,030h,066h,030h,000h,000h,000h,00Ch
DB 0C6h,070h,0CCh,0CCh,03Ch,0C0h,060h,0CCh,0CCh,0CCh,030h,030h,030h,000h,030h,0CCh
DB 0C6h,078h,066h,066h,06Ch,062h,062h,066h,0CCh,030h,00Ch,066h,060h,0EEh,0E6h,06Ch
DB 066h,0CCh,066h,0CCh,0B4h,0CCh,0CCh,0C6h,0C6h,0CCh,0C6h,060h,060h,018h,038h,000h
DB 030h,000h,060h,000h,00Ch,000h,06Ch,000h,060h,000h,000h,060h,030h,000h,000h,000h
DB 000h,000h,000h,000h,030h,000h,000h,000h,000h,000h,000h,030h,018h,030h,0DCh,010h
DB 01Eh,0C0h,0CCh,0C0h,066h,0C0h,0DBh,066h,0C6h,0C6h,0CCh,00Eh,0EEh,0C6h,0C6h,0C6h
DB 0C6h,0C6h,030h,0C6h,07Eh,066h,0CCh,0C6h,0D6h,0D6h,030h,0C2h,0C0h,0C6h,0DBh,0C6h
DB 000h,078h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 088h,0AAh,077h,010h,010h,010h,014h,000h,000h,014h,014h,000h,014h,014h,010h,000h
DB 010h,010h,000h,010h,000h,010h,010h,014h,014h,000h,014h,000h,014h,000h,014h,010h
DB 014h,000h,000h,014h,010h,000h,000h,014h,010h,010h,000h,0FFh,000h,0F0h,00Fh,0FFh
DB 000h,000h,000h,000h,018h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 0FCh,000h,030h,030h,014h,010h,030h,000h,090h,000h,000h,010h,0D0h,090h,000h,000h
DB 000h,0A5h,0DBh,0FEh,07Ch,038h,038h,018h,0E7h,066h,099h,00Fh,066h,03Fh,07Fh,03Ch
DB 0F8h,03Eh,07Eh,066h,0DBh,038h,000h,07Eh,07Eh,018h,00Ch,060h,0C0h,066h,03Ch,0FFh
DB 000h,078h,06Ch,0FEh,0C0h,0CCh,038h,0C0h,060h,018h,03Ch,030h,000h,000h,000h,018h
DB 0CEh,030h,00Ch,00Ch,06Ch,0F8h,0C0h,00Ch,0CCh,0CCh,030h,030h,060h,0FCh,018h,00Ch
DB 0DEh,0CCh,066h,0C0h,066h,068h,068h,0C0h,0CCh,030h,00Ch,06Ch,060h,0FEh,0F6h,0C6h
DB 066h,0CCh,066h,060h,030h,0CCh,0CCh,0C6h,06Ch,0CCh,08Ch,060h,030h,018h,06Ch,000h
DB 018h,078h,060h,078h,00Ch,078h,060h,076h,06Ch,070h,00Ch,066h,030h,0CCh,0F8h,078h
DB 0DCh,076h,0DCh,07Ch,07Ch,0CCh,0CCh,0C6h,0C6h,0CCh,0FCh,030h,018h,030h,000h,038h
DB 036h,0C0h,0CCh,0C0h,066h,0C0h,07Eh,006h,0CEh,0CEh,0D8h,01Eh,0FEh,0C6h,0C6h,0C6h
DB 0C6h,0C0h,030h,0C6h,0DBh,03Ch,0CCh,0C6h,0D6h,0D6h,030h,0C2h,0C0h,006h,0DBh,0C6h
DB 078h,0C0h,0F8h,0FCh,07Eh,078h,0DBh,078h,0CCh,0CCh,0CCh,00Eh,0C6h,0CCh,078h,0FCh
DB 022h,055h,0DBh,010h,010h,0F0h,014h,000h,0F0h,0F4h,014h,0FCh,0F4h,014h,0F0h,000h
DB 010h,010h,000h,010h,000h,010h,01Fh,014h,017h,01Fh,0F7h,0FFh,017h,0FFh,0F7h,0FFh
DB 014h,0FFh,000h,014h,01Fh,01Fh,000h,014h,0FFh,010h,000h,0FFh,000h,0F0h,00Fh,0FFh
DB 0F8h,078h,0FCh,0CCh,07Eh,0C6h,0CCh,0CCh,0D6h,0D6h,0F0h,0C2h,0C0h,07Ch,0CEh,07Ch
DB 0C0h,078h,018h,060h,010h,010h,000h,064h,090h,000h,000h,010h,090h,020h,03Ch,000h
DB 000h,081h,0FFh,0FEh,0FEh,0FEh,07Ch,03Ch,0C3h,042h,0BDh,07Dh,066h,030h,063h,0E7h
DB 0FEh,0FEh,018h,066h,07Bh,06Ch,000h,018h,018h,018h,0FEh,0FEh,0C0h,0FFh,07Eh,07Eh
DB 000h,030h,000h,06Ch,078h,018h,076h,000h,060h,018h,0FFh,0FCh,000h,0FCh,000h,030h
DB 0DEh,030h,038h,038h,0CCh,00Ch,0F8h,018h,078h,07Ch,000h,000h,0C0h,000h,00Ch,018h
DB 0DEh,0CCh,07Ch,0C0h,066h,078h,078h,0C0h,0FCh,030h,00Ch,078h,060h,0FEh,0DEh,0C6h
DB 07Ch,0CCh,07Ch,030h,030h,0CCh,0CCh,0D6h,038h,078h,018h,060h,018h,018h,0C6h,000h
DB 000h,00Ch,07Ch,0CCh,07Ch,0CCh,0F0h,0CCh,076h,030h,00Ch,06Ch,030h,0FEh,0CCh,0CCh
DB 066h,0CCh,076h,0C0h,030h,0CCh,0CCh,0D6h,06Ch,0CCh,098h,0E0h,000h,01Ch,000h,06Ch
DB 066h,0FCh,0FCh,0C0h,066h,0F8h,018h,03Ch,0DEh,0DEh,0F8h,036h,0D6h,0FEh,0C6h,0C6h
DB 0FCh,0C0h,030h,07Eh,0DBh,018h,0CCh,07Eh,0D6h,0D6h,03Eh,0F2h,0FCh,01Eh,0FBh,07Eh
DB 00Ch,0F8h,0CCh,0C0h,066h,0CCh,07Eh,0CCh,0CCh,0CCh,0D8h,01Eh,0EEh,0CCh,0CCh,0CCh
DB 088h,0AAh,0EEh,010h,010h,010h,014h,000h,010h,004h,014h,004h,004h,014h,010h,000h
DB 010h,010h,000h,010h,000h,010h,010h,014h,010h,010h,000h,000h,010h,000h,000h,000h
DB 014h,000h,000h,014h,010h,010h,000h,014h,010h,010h,000h,0FFh,000h,0F0h,00Fh,0FFh
DB 0CCh,0CCh,030h,0CCh,0DBh,06Ch,0CCh,0CCh,0D6h,0D6h,030h,0C2h,0C0h,0C6h,0DBh,0CCh
DB 0F8h,0CCh,030h,030h,010h,010h,0FCh,098h,060h,030h,000h,090h,090h,040h,03Ch,000h
DB 000h,0BDh,0C3h,07Ch,07Ch,0FEh,0FEh,03Ch,0C3h,042h,0BDh,0CCh,03Ch,030h,063h,0E7h
DB 0F8h,03Eh,018h,066h,01Bh,06Ch,07Eh,07Eh,018h,07Eh,00Ch,060h,0C0h,066h,0FFh,03Ch
DB 000h,030h,000h,0FEh,00Ch,030h,0DCh,000h,060h,018h,03Ch,030h,000h,000h,000h,060h
DB 0F6h,030h,060h,00Ch,0FEh,00Ch,0CCh,030h,0CCh,00Ch,000h,000h,060h,000h,018h,030h
DB 0DEh,0FCh,066h,0C0h,066h,068h,068h,0CEh,0CCh,030h,0CCh,06Ch,062h,0D6h,0CEh,0C6h
DB 060h,0DCh,06Ch,018h,030h,0CCh,0CCh,0FEh,038h,030h,032h,060h,00Ch,018h,000h,000h
DB 000h,07Ch,066h,0C0h,0CCh,0FCh,060h,0CCh,066h,030h,00Ch,078h,030h,0FEh,0CCh,0CCh
DB 066h,0CCh,066h,078h,030h,0CCh,0CCh,0FEh,038h,0CCh,030h,030h,018h,030h,000h,0C6h
DB 0FEh,0C6h,0C6h,0C0h,066h,0C0h,07Eh,006h,0F6h,0F6h,0CCh,066h,0C6h,0C6h,0C6h,0C6h
DB 0C0h,0C0h,030h,006h,0DBh,03Ch,0CCh,006h,0D6h,0D6h,033h,0DAh,0C6h,006h,0DBh,036h
DB 07Ch,0CCh,0F8h,0C0h,066h,0FCh,018h,018h,0DCh,0DCh,0F0h,036h,0D6h,0FCh,0CCh,0CCh
DB 022h,055h,0DBh,010h,0F0h,0F0h,0F4h,0FCh,0F0h,0F4h,014h,0F4h,0FCh,0FCh,0F0h,0F0h
DB 01Fh,0FFh,0FFh,01Fh,0FFh,0FFh,01Fh,017h,01Fh,017h,0FFh,0F7h,017h,0FFh,0F7h,0FFh
DB 0FFh,0FFh,0FFh,01Fh,01Fh,01Fh,01Fh,0FFh,0FFh,0F0h,01Fh,0FFh,0FFh,0F0h,00Fh,000h
DB 0CCh,0C0h,030h,07Ch,0DBh,038h,0CCh,07Ch,0D6h,0D6h,03Eh,0F2h,0F8h,01Eh,0FBh,07Ch
DB 0C0h,0FCh,060h,018h,010h,010h,000h,000h,000h,030h,030h,050h,090h,0F0h,03Ch,000h
DB 000h,099h,0E7h,038h,038h,0D6h,07Ch,018h,0E7h,066h,099h,0CCh,018h,070h,067h,03Ch
DB 0E0h,00Eh,07Eh,000h,01Bh,038h,07Eh,03Ch,018h,03Ch,018h,030h,0FEh,024h,0FFh,018h
DB 000h,000h,000h,06Ch,0F8h,066h,0CCh,000h,030h,030h,066h,030h,030h,000h,030h,0C0h
DB 0E6h,030h,0CCh,0CCh,00Ch,0CCh,0CCh,030h,0CCh,018h,030h,030h,030h,0FCh,030h,000h
DB 0C0h,0CCh,066h,066h,06Ch,062h,060h,066h,0CCh,030h,0CCh,066h,066h,0C6h,0C6h,06Ch
DB 060h,078h,066h,0CCh,030h,0CCh,078h,0EEh,06Ch,030h,066h,060h,006h,018h,000h,000h
DB 000h,0CCh,066h,0CCh,0CCh,0C0h,060h,07Ch,066h,030h,0CCh,06Ch,030h,0D6h,0CCh,0CCh
DB 07Ch,07Ch,060h,00Ch,034h,0CCh,078h,0FEh,06Ch,07Ch,064h,030h,018h,030h,000h,0C6h
DB 0C6h,0C6h,0C6h,0C0h,066h,0C0h,0DBh,0C6h,0E6h,0E6h,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h
DB 0C0h,0C6h,030h,0C6h,07Eh,066h,0CCh,006h,0D6h,0D6h,033h,0DAh,0C6h,0C6h,0DBh,066h
DB 0CCh,0CCh,0C6h,0C0h,066h,0C0h,07Eh,0CCh,0ECh,0ECh,0CCh,066h,0C6h,0CCh,0CCh,0CCh
DB 088h,0AAh,077h,010h,010h,010h,014h,014h,010h,014h,014h,014h,000h,000h,000h,010h
DB 000h,000h,010h,010h,000h,010h,010h,014h,000h,014h,000h,014h,014h,000h,014h,000h
DB 000h,010h,014h,000h,000h,010h,014h,014h,010h,000h,010h,0FFh,0FFh,0F0h,00Fh,000h
DB 0F8h,0CCh,030h,00Ch,07Eh,06Ch,0CCh,00Ch,0D6h,0D6h,033h,0DAh,0CCh,0C6h,0DBh,06Ch
DB 0C0h,0C0h,000h,000h,010h,050h,030h,064h,000h,000h,000h,030h,000h,000h,03Ch,000h
DB 000h,081h,0FFh,010h,010h,010h,010h,000h,0FFh,03Ch,0C3h,0CCh,07Eh,0F0h,0E6h,0DBh
DB 080h,002h,03Ch,066h,01Bh,0CCh,07Eh,018h,018h,018h,000h,000h,000h,000h,000h,000h
DB 000h,030h,000h,06Ch,030h,0C6h,076h,000h,018h,060h,000h,000h,030h,000h,030h,080h
DB 07Ch,0FCh,0FCh,078h,01Eh,078h,078h,030h,078h,070h,030h,030h,018h,000h,060h,030h
DB 078h,0CCh,0FCh,03Ch,0F8h,0FEh,0F0h,03Eh,0CCh,078h,078h,0E6h,0FEh,0C6h,0C6h,038h
DB 0F0h,01Ch,0E6h,078h,078h,0FCh,030h,0C6h,0C6h,078h,0FEh,078h,002h,078h,000h,000h
DB 000h,076h,0DCh,078h,076h,078h,0F0h,00Ch,0E6h,078h,0CCh,0E6h,078h,0C6h,0CCh,078h
DB 060h,00Ch,0F0h,0F8h,018h,076h,030h,06Ch,0C6h,00Ch,0FCh,01Ch,018h,0E0h,000h,0FEh
DB 0C6h,0FCh,0FCh,0C0h,0FFh,0FEh,0DBh,07Ch,0C6h,0C6h,0C6h,0C6h,0C6h,0C6h,07Ch,0C6h
DB 0C0h,07Ch,030h,07Ch,018h,0C3h,0FEh,006h,0FEh,0FFh,03Eh,0F2h,0FCh,07Ch,0CEh,0C6h
DB 07Eh,078h,0FCh,0C0h,0FFh,07Ch,0DBh,078h,0CCh,0CCh,0CCh,0C6h,0C6h,0CCh,078h,0CCh
DB 022h,055h,0DBh,010h,010h,010h,014h,014h,010h,014h,014h,014h,000h,000h,000h,010h
DB 000h,000h,010h,010h,000h,010h,010h,014h,000h,014h,000h,014h,014h,000h,014h,000h
DB 000h,010h,014h,000h,000h,010h,014h,014h,010h,000h,010h,0FFh,0FFh,0F0h,00Fh,000h
DB 0C0h,078h,030h,0CCh,018h,0C6h,0FEh,00Ch,0FEh,0FFh,03Eh,0F2h,0F8h,07Ch,0CEh,0CCh
DB 0FEh,07Ch,078h,078h,010h,020h,030h,098h,000h,000h,000h,010h,000h,000h,000h,000h
DB 000h,07Eh,07Eh,000h,000h,038h,038h,000h,0FFh,000h,0FFh,078h,018h,0E0h,0C0h,018h
DB 000h,000h,018h,000h,000h,078h,000h,0FFh,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,060h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,060h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,0FFh
DB 000h,000h,000h,000h,000h,000h,000h,0F8h,000h,000h,078h,000h,000h,000h,000h,000h
DB 0F0h,01Eh,000h,000h,000h,000h,000h,000h,000h,0F8h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,0C3h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,000h,000h,006h,000h,000h,003h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,0C3h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h
DB 088h,0AAh,0EEh,010h,010h,010h,014h,014h,010h,014h,014h,014h,000h,000h,000h,010h
DB 000h,000h,010h,010h,000h,010h,010h,014h,000h,014h,000h,014h,014h,000h,014h,000h
DB 000h,010h,014h,000h,000h,010h,014h,014h,010h,000h,010h,0FFh,0FFh,0F0h,00Fh,000h
DB 0C0h,000h,000h,078h,018h,000h,006h,000h,000h,003h,000h,000h,000h,000h,000h,000h
DB 000h,000h,000h,000h,010h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h,000h

789
ZX_EXP/SERVICE.ASM Normal file
View File

@ -0,0 +1,789 @@
;.PRINTX "Service."
SERVICE:
LD HL,SR_TAB
LD DE,SR_MENU
LD BC,SR_LEN
PUSH HL
CALL RUN_MENU ;09f3
POP HL
CALL EXEC_PNT
JR SERVICE
SR_TAB:
DW UTILIT
DW SR_48R
DW SR_48
DW TURBO_OFF_1
DW TURBO_ON_1
DW CLEAR_RAM
DW RET_FROM_M
; DC - every last character of a string will have bit 7 set
SR_MENU:
BYTE 8 ; ª®«¨ç¥á⢮ ¯ã­ªâ®¢
BYTE 'Options ',#FF ; § £®«®¢®ª ¬¥­î
DC 'RUN disk.trd'
DC '128 TR-DOS'
DC '48 TR-DOS'
DC 'TURBO OFF '
DC 'TURBO ON '
DC 'Clear RAM'
DC 'RETURN'
DC ' ' ; ¬ àª¥à ª®­æ 
SR_LEN EQU $-SR_MENU
;*****************************
SR_48R:
LD A,10H
JR SR_48A
;*****************************
SR_48:
LD A,30H
SR_48A:
LD BC,7FFDH
OUT (C),A ; ‘⮯®à ­  PORT_128 !!!
LD BC,0 ; <20>€ 0 !!
PUSH BC
LD BC,3D2Fh ; DOS !
PUSH BC
JP SW_ROM
;*******************************
IFDEF ZX_BIOS
TURBO_OFF_1:
LD A,BIOS.FN_TURBO.OFF
LD C,BIOS.FN_TURBO
JP ToBIOS_18
TURBO_ON_1:
LD A,BIOS.FN_TURBO.ON
LD C,BIOS.FN_TURBO
JP ToBIOS_18
ELSE
;
TURBO_OFF_1:
DI
CALL DOS_ON
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(CONFIG_DE)
AND 0FCH
OR 2
LD (CONFIG_DE),A
OUT (CNF_PORT),A
EX AF,AF'
OUT (PAGE3),A
CALL DOS_OFF
EI
RET
TURBO_ON_1:
DI
CALL DOS_ON
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD A,(CONFIG_DE)
AND 0FCH
OR 3
LD (CONFIG_DE),A
OUT (CNF_PORT),A
EX AF,AF'
OUT (PAGE3),A
EI
CALL DOS_OFF
RET
ENDIF
;*******************************
CLEAR_RAM:
DI
LD C,9Fh
RST 18h
IFDEF ZX_BIOS
; ¯à¨ ®ç¨á⪥ ¯ ¬ï⨠¨§ ¬¥­î ᯥªâà㬠 ¯®«®¬ ¥âáï ¢®§¢à â ¢ DSS ¯® CAD, ¯®í⮬㠮⪫îç ¥¬ ¢®§¢à â
LD A,#EE ;!HARDCODE Conf_port.RET_PORT
LD BC,0*256 + #F8 ;!HARDCODE BIOS.SET_PORTS
CALL #3D13 ;!HARDCODE ToBIOS_3D13
ENDIF
EI
RET
;SR_CL_MEM:
; DI
; LD A,10H
;SR_CL_R2:
; LD BC,1FFDH
; OUT (C),A
; EX AF,AF'
; XOR A
;SR_CL_R1:
; LD BC,7FFDH
; OUT (C),A
; LD HL,0C000H
; LD DE,0C001H
; LD BC,03FFFH
; LD (HL),L
; LDIR
; INC A
; CP 48H
; JR NZ,SR_CL_R1
; EX AF,AF'
; CP 0
; JP Z,BASIC_128 ; ¢ë室 ­  á¡à®á BASIC 128
; LD A,0
; JR SR_CL_R2
;*****************************
; *** MENU IS-DOS ***
;*****************************
ISDOS:
LD HL,IS_TAB
LD DE,IS_MENU
LD BC,IS_MENU.Size
PUSH HL
CALL RUN_MENU
POP HL
CALL EXEC_PNT
JR ISDOS
IS_TAB:
; DW TR_DOS
; DW SP_DOS
DW SPRINTER_1X
DW AY8910_X
DW PENTAGON
DW SCORPION
DW PENTAGON512
DW SPRINTER_2X
DW RET_FROM_M
; DC - every last character of a string will have bit 7 set
IS_MENU:
BYTE 8 ; ª®«¨ç¥á⢮ ¯ã­ªâ®¢
BYTE 'Hardware',#FF ; § £®«®¢®ª ¬¥­î
DC 'Sprinter ZX '
DC 'ZX Spectrum'
DC 'Pentagon 128'
DC 'Scorpion 256'
DC 'Pentagon 512'
DC 'Restart '
DC 'RETURN'
DC ' ' ; ¬ àª¥à ª®­æ 
.Size EQU $-IS_MENU
;******************************
;SP_DOS:
; LD B,#E2
; LD A,#E1
; JR TR_DOS1
;TR_DOS:
; LD B,#EA
; LD A,#E1
;TR_DOS1:
; CALL DOS_ON
; CALL SET_ROM_PAGES
; CALL DOS_OFF
; RET
;******************************
;**************************************************
AY8910_X:
CALL AY8910
JR SPRINTER_2XX
SPRINTER_1X:
CALL SPRINTER_1
; JR SPRINTER_2XX
SPRINTER_2XX:
CALL SPRINTER_
CALL DOS_OFF
CALL CLS
RET
SPRINTER_2X:
CALL SPRINTER_2
CALL DOS_OFF
XOR A
JP RESET_1 ; á¡à®á ¡¥§ ¯¥à¥§ £à㧪¨
AY8910:
LD D,#35
CALL CMOS_RD
OR 1
CALL CMOS_WR
LD BC,204Eh ; port all_mode
IN A,(C)
AND #FE
OUT (C),A ; ACC_OFF
LD A,PG_AY
JR SPRINTER_ALL
SPRINTER_1:
LD D,35H
CALL CMOS_RD
AND 0FEh
CALL CMOS_WR
LD BC,204Eh
IN A,(C)
AND 0FEh
OUT (C),A ; ACC_OFF
LD A,PG_SP1
JR SPRINTER_ALL
;
SPRINTER_2:
LD BC,204Eh
IN A,(C)
OR 01h ; ACC_ON
OUT (C),A
LD A,PG_SP2
SPRINTER_ALL:
; RET
EX AF,AF'
DI
; CALL DOS_ON
LD A,CNF_0
OUT (CNF_PORT),A
XOR A
LD BC,1FFDH
OUT (C),A
LD A,10H
LD B,7FH
OUT (C),A
LD C,PAGE3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD DE,CNF_0+D_TBON
LD HL,L_PENTAGON
LD (CONFIG_ALL),HL
LD (CONFIG_DE),DE
LD A,B
LD (COPY_PAGE3),A
EX AF,AF'
; LD HL,CONFIG_BYTE
;
; CP (HL)
; JR NZ,SET_CONFIG1
; INC HL
; LD A,(HL)
; AND A
; JP Z,NO_SET_CONFIG
;
; DEC HL
; LD A,(HL)
;SET_CONFIG1:
;
; LD (HL),A
; INC HL
; LD (HL),0
LD (SYS_SP),SP
LD SP,SYS_SP-2
PUSH IY
PUSH IX
PUSH HL
PUSH DE
PUSH BC
PUSH AF
EXX
EX AF,AF'
PUSH HL
PUSH DE
PUSH BC
PUSH AF
EXX
; EX AF,AF'
; EX AF,AF'
LD A,R
PUSH AF
LD A,I
PUSH AF
LD (SP_SAVE),SP
IN A,(PAGE2)
LD (COPY_PAGE2),A
IN A,(PAGE1)
LD (COPY_PAGE1),A
IN A,(PAGE0)
LD (COPY_PAGE0),A
; LD A,1
; OUT (PAGE2),A
; LD HL,0BFE0H
; LD DE,0C0A0H
; LD BC,20H
; LDIR
; LD HL,PROG_RETS
; LD DE,0BFE0H
; LD BC,20H
; LDIR
; LD A,40H
; OUT (PAGE2),A
; LD HL,0BFE0H
; LD DE,0C080H
; LD BC,20H
; LDIR
; LD HL,PROG_RETS
; LD DE,0BFE0H
; LD BC,20H
; LDIR
; JP RESTART_RETS_X
LD HL,(CONFIG_BYTE)
LD IX,(CONFIG_BYTE)
LD A,0FFH
OUT (PAGE2),A
LD A,10H
LD BC,1FFDH
OUT (C),A ; 8-ï áâà ­¨æ  !!
IN A,(PAGE3)
EX AF,AF'
CP PG_SP1
LD DE,0FFFEh
JR Z,INT_PLD
CP PG_SP2
LD DE,0FFFDh
JR Z,INT_PLD
CP PG_AY
LD DE,0FFFCh
JR Z,INT_PLD
OUT (PAGE3),A ; ROM á ¯à®è¨¢ª®©
LD DE,(0C090H)
INT_PLD:
EX AF,AF'
OUT (PAGE3),A
LD XH,D
LD XL,E
AND A
SBC HL,DE
JP Z,RESTART_RETS_X
JP RESTART_RETS_X
;================================
; CALL DOS_ON
; XOR A
; OUT (0FH),A
; CALL DOS_OFF
; EX AF,AF'
; OUT (PAGE3),A
; LD HL,0C000H
; LD DE,08000H
; LD BC,4000H
; LDIR ; not Configs for Sp-2000!!!
; LD A,0FFH ; CASH !!
; OUT (PAGE3),A
; LD HL,08000H
; LD DE,0C000H
; LD BC,4000H
; LDIR ; not Config for Sp-2000!!!
RESET_ALL:
LD A,10H
LD BC,1FFDH
OUT (C),A ; 8-ï áâà ­¨æ  !!
LD A,0A0H
OUT (PAGE3),A
LD A,D_TBOFF
OUT (CNF_PORT),A
RESET_L:
LD (0C000H),A ; RESET !!!
JR RESET_L
DI
HALT
;=================================
PROG_RETS:
LD HL,RESTARTS ; 3
LD B,16 ; 2
REST_LOOPS:
LD (HL),0 ; 2
INC HL ; 1
DJNZ REST_LOOPS ; 2
NOP ; 1
NOP ; 1
LD A,1 ; 2
OUT (PAGE3),A ; 2
JP RESTART_RETS
RESTART_RETS_X:
RESTART_RETS:
XOR A
OUT (0EFH),A ; § ­ã«¥­¨¥ WAIT-®¢
LD BC,1FFDH
OUT (C),A
LD A,10H
LD B,7FH
OUT (C),A
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD (CONFIG_BYTE),IX
EX AF,AF'
OUT (PAGE3),A
EX AF,AF'
LD A,XL
CP #FF
LD A,128
JR Z,YES_CBL
XOR A
YES_CBL:
LD BC,78
OUT (C),A
LD A,XL
OR #FE
LD BC,204Eh ;ALL_MODE
OUT (C),A
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
; LD A,1
; OUT (PAGE2),A
; LD DE,0BFE0H
; LD HL,0C0A0H
; LD BC,20H
; LDIR
; LD A,40H
; OUT (PAGE2),A
; LD DE,0BFE0H
; LD HL,0C080H
; LD BC,20H
; LDIR
LD A,(COPY_PAGE0)
OUT (PAGE0),A
LD A,(COPY_PAGE1)
OUT (PAGE1),A
LD A,(COPY_PAGE2)
OUT (PAGE2),A
LD SP,(SP_SAVE)
POP AF
LD I,A
POP AF
LD R,A
EXX
EX AF,AF'
POP AF
POP BC
POP DE
POP HL
EXX
EX AF,AF'
POP AF
POP BC
POP DE
POP HL
POP IX
POP IY
LD SP,(SYS_SP)
IM 1
LD A,(BORDER)
RRCA
RRCA
RRCA
AND 7
OUT (0FEH),A
CALL DOS_ON
LD A,3CH
OUT (0FFH),A
CALL DOS_OFF
NO_SET_CONFIG:
LD A,(COPY_PAGE3)
OUT (PAGE3),A
AND A
; CALL DOS_ON
EI
RET
;*****************************
;PROG_SINC:
; DI
; LD C,PAGE1
; IN A,(C)
; LD B,0FFH
; OUT (C),B
; LD (7FFEH),BC
; LD (7FFCH),SP
; LD SP,7FF0H
; CALL PROG_SCR
; LD SP,(7FFCH)
; LD BC,(7FFEH)
; OUT (C),B
; EI
; RET
CNF_SC_312:
DI
CALL DOS_ON
LD A,CNF_0
OUT (CNF_PORT),A
LD A,61H ; set 312 lines
OUT (0BDh),A
CALL DOS_OFF
LD HL,L_SCORPION
RET
CNF_PN_320:
DI
CALL DOS_ON
LD A,CNF_0
OUT (CNF_PORT),A
LD A,41H ; set 320 lines
OUT (0BDh),A
CALL DOS_OFF
LD HL,L_PENTAGON
RET
SPRINTER_:
CALL CNF_PN_320
LD DE,CNF_0+D_TBON
JR CONFIG_SET1
SCORPION:
CALL CNF_SC_312
LD DE,CNF_1+D_TBON
JR CONFIG_SET1
PENTAGON:
CALL CNF_PN_320
LD DE,CNF_2+D_TBON
JR CONFIG_SET1
PENTAGON512:
CALL CNF_PN_320
LD DE,CNF_2+D_TBON+CNF_512
; JR CONFIG_SET1
CONFIG_SET1:
CALL DOS_ON
CALL CONFIG_SET
CALL DOS_OFF
EI
RET
CONFIG_SET:
EI
HALT
DI
IN A,(PAGE3)
EX AF,AF'
LD A,SYS_PAGE
OUT (PAGE3),A
LD (CONFIG_ALL),HL
LD (CONFIG_DE),DE
EX AF,AF'
OUT (PAGE3),A
PUSH DE
CALL SINC_DEF
LD HL,4104H
LD E,0
LD B,4
CALL LP_OPEN_S
LD HL,5104H
LD E,0
LD B,4
CALL LP_OPEN_S
POP DE
LD A,E
OUT (CNF_PORT),A
RET
; LD A,CNF_0
; OUT (CNF_PORT),A
; CALL DOS_OFF
; JP 0
;*****************************
; *** MENU UTILITES ***
;*****************************
UTILIT:
LD HL,C_DISK_C
CALL CALL_DOS1
CALL DOS_ON
LD A,0 ; DETECT_HDD
CALL HDD_EXE
CALL DOS_OFF
JR C,DISK_UTILIT
LD HL,C_DISK_C3
CALL CALL_DOS1
UTIL_DISK:
LD A,0
CALL EMM_FN3
LD HL,C_DEMO6
CALL CALL_DOS1
LD A,0
CALL GET_RAMD_ST
JR C,UTIL_DISK_L1
JR Z,UTIL_DISK_L1
LD HL,C_DISK_C1
CALL CALL_DOS1
LD HL,C_DISK_C2
CALL CALL_DOS1
RET
UTIL_DISK_L1:
LD A,(OPER_DISK)
INC A
CP 2
JR Z,DISK_UTIL_RET
LD HL,C_DISK_C5
CALL CALL_DOS1
JR UTIL_DISK
DISK_UTIL_RET:
LD HL,C_DISK_C6
CALL CALL_DOS1
RET
DISK_UTILIT:
LD HL,C_DISK_C4
CALL CALL_DOS1
JR UTIL_DISK
C_DEMO6: DB C_DEMO6_L,ZX_Token.rem,':/disk.trd',13,80
C_DEMO6_L EQU $-C_DEMO6-1
;***************************************
;VERSION: DEFB 22,21,0
; DEFB 16,2,"Expansion 3.02  1997 ELSY Co.",16,1,0FFh
;**********************************************
DOS_RUN:
LD HL,C_DISK_C1
CALL CALL_DOS1
LD HL,C_DISK_C2
CALL CALL_DOS1
RET
START_TRD:
LD HL,C_DISK_C
CALL CALL_DOS1
LD HL,C_DISK_C0
CALL CALL_DOS1
LD HL,C_DISK_C3
CALL CALL_DOS1
RET
C_DISK_C: DB C_DISK_CL,ZX_Token.rem,':',13,80
C_DISK_CL EQU $-C_DISK_C-1
C_DISK_C0: DB C_DISK_C0L,ZX_Token.rem,':/CLEAR E',13,80
C_DISK_C0L EQU $-C_DISK_C0-1
C_DISK_C1: DB C_DISK_C1L,ZX_Token.rem,':/RMD E',13,80
C_DISK_C1L EQU $-C_DISK_C1-1
C_DISK_C2: DB C_DISK_C2L,ZX_Token.rem,':RUN',13,80
C_DISK_C2L EQU $-C_DISK_C2-1
C_DISK_C3: DB C_DISK_C3L,ZX_Token.rem,':/HDD',13,80
C_DISK_C3L EQU $-C_DISK_C3-1
C_DISK_C4: DB C_DISK_C4L,ZX_Token.rem,':/FDD',13,80
C_DISK_C4L EQU $-C_DISK_C4-1
C_DISK_C5: DB C_DISK_C5L,ZX_Token.rem,':/B:',13,80
C_DISK_C5L EQU $-C_DISK_C5-1
C_DISK_C6: DB C_DISK_C6L,ZX_Token.rem,':/A:',13,80
C_DISK_C6L EQU $-C_DISK_C6-1
;

340
ZX_EXP/TEST.ASM Normal file
View File

@ -0,0 +1,340 @@
; "MENU PROGRAMS."
;*********************************
; FOR INCLUDE !!!
;*********************************
; Ž¡á«ã¦¨¢ ­¨¥ Œ…<C592>ž
; HL -  ¤à¥á â ¡«¨æë ¯à®£à ¬¬
; A - ­®¬¥à ¢ â ¡«¨æ¥
; ¥á«¨ A=-1, â® ¢®§¢à â,
; ¨­ ç¥ ¢ë¯®«­¥­¨¥
;*****************************
EXEC_PNT:
INC A
RET Z
EXEC_PNT_LOOP:
DEC A
JR Z,EXEC_HL
INC HL
INC HL
JR EXEC_PNT_LOOP
EXEC_HL:
LD E,(HL)
INC HL
LD D,(HL)
INC HL
EX DE,HL
JP (HL)
RET_FROM_M:
POP HL
RET
;****************************************
; <20><EFBFBD>Ž MENU_128
;****************************************
; ‚•Ž„: - DE -  ¤à¥á ¬¥­î
; BC - ¤«¨­  ¬¥­î
; ‚›•Ž„: A - ¢ë¡à ­­ë© ¯ã­ªâ
;****************************************
RUN_MENU:
PUSH IX
PUSH DE ; DE - MENU
PUSH BC ; BC - len_menu
LD A,(DE)
DEC A ; ç¨á«® CMD
CP 9
JR C,RUN_M_1
RUN_MN_ERR:
POP BC
POP DE
LD A,0FFh ; ¢¥à­ãâìáï á ­®¬¥à®¬ 255 - ®è¨¡ª 
POP IX
RET
RUN_M_1:
LD A,(5B00H)
CP #F5 ; <><E282AC>ˆœ € ŠŽ„ŽŒ PUSH AF
JR NZ,RUN_MN_ERR
LD HL,LEN_P_M
ADD HL,BC ; HL - ­ã¦­ ï ¤«¨­  ¯ ¬ïâ¨
LD B,H ; HL -> BC
LD C,L
LD HL,(5C61h) ; HL - ­ ç «® à ¡ ®¡«
PUSH BC
PUSH HL
CALL C_1655 ; ¯®«ãç¨âì à ¡®çãî ¯ ¬ïâì
POP DE
PUSH DE ; ­ ç «® à ¡ ®¡«
LD BC,LEN_P_M ; ¤«¨­  ¯à®£à ¬¬ë ¬¥­î
LD HL,MENU_128 ; á ¬  ¯à®£à ¬¬ 
LDIR ; ¯à®£à ¬¬  ¯¥à¥¬¥é¥­ . DE - ¬¥áâ® ¤«ï MENU
POP BC
PUSH BC ; ­ ç «® ¯à®£à ¬¬ë
PUSH DE ; á®åà ­¨âì ¬¥áâ® ¤«ï MENU
LD DE,MN_128_S ; ¤ ­­ë¥ ¤«ï shifter
CALL SHIFTER ; ¨§¬¥­¨âì ¤ ­­ë¥ ¢ ᮮ⢥âá⢨¨ á ¯®«®¦¥­¨¥¬ ¢ MEM
POP DE ; ¢¥à­ãâì ¬¥áâ® ¤«ï MENU
POP HL ; ­ ç «® ¯à®£à ¬¬ë
POP IX ; ¤«¨­  ¤ ­­ëå
POP BC ; ¤«¨­  ¬¥­î
EX (SP),HL ; HL - ¬¥­î
LDIR ; ¯¥à¥¬¥áâ¨âì ¤ ­­ë¥ MENU
POP HL ;  ¤à¥á ¯à®£à ¬¬ë MENU
PUSH HL
PUSH IX ; ¤«¨­  à ¡. ®¡«
CALL JP_HL ; ¢ë§®¢ ¯à®£à ¬¬ë MENU
POP BC ; ¢¥à­ãâì ¤«¨­ã à ¡ ®¡«
POP HL ; ¨ ­ ç «  ¯à®£à ¬¬ë
PUSH AF ; á®åà ­¨âì ­®¬¥à ¢ë¡®à 
CALL C_19E8 ; ®á¢®¡®¤¨âì ¯ ¬ïâì !!
POP AF ; ¢¥à­ãâì ­®¬¥à ¢ë¡®à 
POP IX
RET ; ¢®§¢à â ¨§ ¯à®£à ¬¬ë RUN_MENU
;**************************************
; 128k MENU
;**************************************
MENU_PROG EQU 25B9h
SWAP_ROM EQU 5B00h
NEW_SP EQU 1F45h
RET_SP EQU 1F20h
;**************************************
; <20>ணࠬ¬  ¢ë§®¢  MENU_128 ¨§ އ“.
;**************************************
MN_128_S:
DB SH_1-MENU_128+1
DB SH_2-MENU_128+1
DB SH_3-MENU_128+1
DB SH_4-MENU_128+1
DB SH_5-MENU_128
DB SH_6-MENU_128
DB SH_7-MENU_128
DB SH_8-MENU_128
DB SH_9-MENU_128
DB SH_A-MENU_128
DB SH_B-MENU_128
DB SH_C-MENU_128
DB 0
;**************************************
; <20>â  ¯à®£à ¬¬  ¯¥à¥¬¥é ¥âáï ¢ ®§ã
;**************************************
MENU_128:
LD A,0
OUT (SYS_PORT_OFF),A
CALL SWAP_ROM
CALL NEW_SP
SH_1: LD DE,MENU_DAT-MENU_128
LD HL,0F6EAh
LD BC,4
LDIR
SH_2: LD HL,MENU_128_E-MENU_128
LD (0F6EAh),HL
SH_3: LD HL,MENU_128_E2-MENU_128
LD (0F6ECh),HL
JP MENU_PROG
RET_M EQU $-MENU_128
SH_4: LD HL,MENU_DAT-MENU_128
LD DE,0F6EAh
LD BC,4
LDIR
CALL RET_SP
CALL SWAP_ROM
EX AF,AF'
LD A,0
OUT (CNF_PORT),A
EX AF,AF'
RET
MENU_DAT:
DW 0,0
MENU_128_E:
DB 8
DB 0
SH_5: DW RET_M
DB 1
SH_6: DW RET_M
DB 2
SH_7: DW RET_M
DB 3
SH_8: DW RET_M
DB 4
SH_9: DW RET_M
DB 5
SH_A: DW RET_M
DB 6
SH_B: DW RET_M
DB 7
SH_C: DW RET_M
MENU_128_E2:
LEN_P_M EQU $-MENU_128
;**************************************
; RST 30 - ¯®«ã祭¨¥ BC SPACES á  ¤à¥á  HL
; 19E8h - ®á¢®¡®¦¤¥­¨¥ BC spaces á  ¤à¥á  HL
; HL - à ¡. ï祩ª 
; BC -  ¤à¥á ¯à®£à ¬¬ë
; DE -  ¤à¥á ¤ ­­ëå ¤«ï ¯¥à¥¬¥é¥­¨ï
SHIFTER:
LD A,(DE) ; (DE) - SHIFT IN PROG
AND A
RET Z
INC DE
LD L,A
LD H,0
ADD HL,BC ; HL - ADRESS FOR SHIFT
LD A,(HL) ; (HL)=(HL)+BC
ADD A,C
LD (HL),A
INC HL
LD A,(HL)
ADC A,B
LD (HL),A
JR SHIFTER
;*******************************************
; Œ…<C592>ž : ¡ ©â 1 - ¤«ï १ã«ìâ â 
; ¡ ©â 2 - ç¨á«® ¯ã­ªâ®¢ +1
; ­ §¢ ­¨¥ ¬¥­î, ª®¤ 0FFh ( COPY )
; ¯ã­ªâë ¬¥­î ®ª®­ç ­¨¥ ¡ ©â®¬ á
; ãáâ, 7-¬ ¡¨â®¬ + ¯ãáâ ï áâப  !!
;*******************************************
BASIC_MENU:
; LD A,(HL)
; CP 'S'
; JP Z,SET_SYSTEM
LD DE,(CH_ADR)
PUSH DE
LD (CH_ADR),HL
CALL_48X 1C8Ch ; SYMBOL VAR
CALL_48X 2BF1h ; input txt !!!
; DE - adr
; BC - len
PUSH DE
PUSH BC
INC DE
CALL TST_M
JR C,NO_EXE_M
CALL RUN_MENU
LD (IY+0),255
NO_EXE_M:
POP BC
POP DE
LD (DE),A
POP HL
LD (CH_ADR),HL
JP SW_ROM
TST_M:
PUSH DE
PUSH BC
EX DE,HL
LD D,(HL)
INC D
LD A,255
CPIR
JR NZ,ERR_TST_M
LOOP_TST_M:
LD A,B
OR C
JR Z,ERR_TST_M
BIT 7,(HL)
INC HL
DEC BC
JR Z,LOOP_TST_M
DEC D
JR NZ,LOOP_TST_M
POP BC
POP DE
AND A
RET
ERR_TST_M:
POP BC
POP DE
LD A,255
SCF
RET
;**************************************
CALL_DOS_MOVE:
LD DE,5C00H-DOS_PROG_LEN
LD HL,DOS_PROG
LD BC,DOS_PROG_LEN
LDIR
RET
;
; HL -  ¤à¥á ª®¬ ­¤ë, BC - ¤«¨­  ª®¬ ­¤ë
CALL_DOS1:
LD C,(HL)
INC HL
LD B,0
LD DE,(5C59H)
LD (5C5DH),DE
LDIR
LD (5C61H),DE
LD (5C63H),DE
LD (5C65H),DE
CALL CALL_DOS_MOVE
JP 5C00H-DOS_PROG_LEN
CALL_DOS:
PUSH HL
PUSH DE
PUSH BC
PUSH AF
CALL CALL_DOS_MOVE
LD A,13H
LD (5C00H-DOS_PROG_LEN+DOS_PROG_A),A
POP AF
POP BC
POP DE
POP HL
JP 5C00H-DOS_PROG_LEN
DOS_PROG:
PUSH AF
XOR A
OUT (SYS_PORT_OFF),A
POP AF
CALL 3D03H
DOS_PROG_A EQU $-DOS_PROG-1
PUSH AF
LD A,0
OUT (CNF_PORT),A
POP AF
RET
DOS_PROG_LEN EQU $-DOS_PROG
CONT_PROG:
LD HL,1AFDH
PUSH HL
LD HL,5B00H
PUSH HL
LD DE,5C71H
LD BC,1
LD A,0E8H
LD (DE),A
JP SW_ROM

87
ZX_EXP2.ASM Normal file
View File

@ -0,0 +1,87 @@
;
; EXPANSION VER 3.00 (C) 1997 ELSY Co.
DEVICE ZXSPECTRUM128
ORG 0
INCLUDE 'INC/SPRINT00.INC' ; ª®­áâ ­âë, ¬ ªà®áë..
;******************************
; ***** BEGIN EXPANSION *****
;******************************
START:
DI
HALT
;***************************
BLOCK #10-$,255
RET
;***************************
BLOCK #38-$,255
EI
RETI
;***************************
BLOCK #66-$,#C9
RETN
;***************************
BLOCK #100-$,255
INCLUDE 'EXP/EXP_HDD.ASM'
; INCLUDE 'EXP_KBD.ASZ'
;GLOBAL_RESET:
;GLOBAL_RESET_ALL:
; LD A,0
; OUT (0FDH),A
; LD A,40H
; OUT (0FDH),A
; LD A,0
; OUT (CNF_PORT),A
; LD HL,0
; PUSH HL
; DI
; RET
BLOCK #3FD0-$,255
PUSH AF
LD A,D_ROM16OFF
OUT (SYS_PORT_ON),A
POP AF
HD_CMD_XR_RET:
RET
HD_CMD_XR:
JP HD_CMD
;************************
BLOCK #3FE0-$,255
SND_TEST_RET:
LD A,D_ROM16OFF
OUT (SYS_PORT_OFF),A
JP SND_TEST_RET
;***************************
BLOCK #3FE8-$,255
HD_EXP_RET:
PUSH AF
LD A,D_ROM16OFF
OUT (SYS_PORT_ON),A
JP HD_EXP_EXE
BLOCK #3FF0-$,255
HD_DOS_RET:
PUSH AF
DI
LD A,D_ROM16OFF
OUT (SYS_PORT_OFF),A
JR HD_CMD_XR
EXP_FNS_RET:
PUSH AF
LD A,D_ROM16OFF
OUT (SYS_PORT_OFF),A
JP HD_CMD_XR_RET
;******************************************
BLOCK #4000-$,255
;
;

618
inc/SPRINT00.INC Normal file
View File

@ -0,0 +1,618 @@
; ; .LION EQU 0
; ; .FLEX EQU 1
; ; .IBMK EQU 1
; ; .PROJ1 EQU 0
; ; .PROJ2 EQU 0
; ; .PROJ3 EQU 1
; ; .PROJ4 EQU 1
; ; .PAL EQU 1
; FastRAM_ON EQU #FB ; ‚ª«î祭¨¥ ªíè  IN A,(FastRAM_ON) - ¯à¨¡¨â® £¢®§¤ï¬¨ ¢ ª®­ä¥
; FastRAM_OFF EQU #7B ; Žâª«î祭¨¥ ªíè  IN A,(FastRAM_OFF) - ¯à¨¡¨â® £¢®§¤ï¬¨ ¢ ª®­ä¥
; FastRam_BANK0 EQU #5C ; <20>¥à¥ª«î祭¨¥ áâà ­¨æ ªíè  ¯à¨ FastRAM_ON ¢ ­ã«¥¢®¬ ®ª­¥ (bit0..1)
; ROM_BANK0 EQU #5C ; <20>¥à¥ª«î祭¨¥ áâà ­¨æ <20>‡“ ¯à¨ FastRAM_OFF ¢ ­ã«¥¢®¬ ®ª­¥ (bit0..3)
; ; ; bit4 - Write-Enable (0 - no Write; 1 - Write)
; ;ELCOM256 EQU 1 ; ०¨¬ ELCOM-256
; ;IF ELCOM256 = 1
; Spec_Page EQU #41 ; áâà ­¨æ  ¤«ï ¯¥à¥å¢ â  à¥á¥â  ¨ ¥éñ 祣®-â®
DCP_PAGE EQU #40 ; áâà ­¨æ  ¯®à⮢
; Port_All_Mode EQU #204E
; PORT_JOYSTICK EQU 0FFh
D_TBON EQU 3 ; ¤ ­­ë¥ ¤«ï ¢ª«î祭¨ï TURBO
D_TBOFF EQU 2 ; ¤ ­­ë¥ ¤«ï ¢ª«î祭¨ï TURBO
D_ROM16ON EQU 1
D_ROM16OFF EQU 0
CNF_0 EQU 04h
CNF_1 EQU 0Ch
CNF_2 EQU 14h
; CNF_3 EQU 1Ch
CNF_512 EQU 80h ; ¢ª«î祭¨¥ Pentagon 128
CBL_DIR EQU 78 ; ¯®àâ ã¯à ¢«¥­¨ï COVOX-Blaster
; ; bit 7 - 1 ¢ª«îç¨âì CBL
; COVOX_PORT EQU 79
; ;ELSE
; ;D_TBON EQU 03h ; ¤ ­­ë¥ ¤«ï ¢ª«î祭¨ï TURBO
; ;D_TBOFF EQU 02h ; ¤ ­­ë¥ ¤«ï ¢ª«î祭¨ï TURBO
; ;D_ROM16ON EQU 40h
; ;D_ROM16OFF EQU 00h
; ;CNF_0 EQU 04h
; ;CNF_1 EQU 0Ch
; ;CNF_2 EQU 14h
; ;CNF_3 EQU 1Ch
; ;ENDIF
; SPRINTER EQU 4 ; <E2809A>ˆŸ !!!
; ISD_WARM EQU 3
; ISD_COLD EQU 0
; IS_KEY EQU 40h ; „€<E2809E><E282AC>… „‹Ÿ ‚›‚Ž„€ <20>Ž<EFBFBD> <20><>ˆ Šž—…<E28094>ˆˆ IS-DOS
; IS_RAM_ADR EQU 5BC0h ; €„<E282AC> ‡€ƒ<E282AC>“‡Šˆ <20><>Žƒ<C5BD>€ŒŒ <20><EFBFBD>…•Ž„€ IS-DOS
; TB_WAITES EQU 00H ; WAITë ¤«ï TURBO-MODE
; NTB_WAITES EQU 00H ; WAITë ¤«ï neTURBO-MODE
; IS_WAITES EQU 00H ; WAITë ¤«ï IS-DOS
; ;****************************************
; ;SYS_PORT_ON EQU 07DH
; ;SYS_PORT_OFF EQU 03DH
;SYS_PORT_ON EQU CNF_PORT ;07CH
SYS_PORT_ON EQU #7C
SYS_PORT_OFF EQU #3C
; Port_VSYNC EQU #BD ; #61 - 320Lines/49Hz, #41 - 312Lines/50Hz
; .SET_320L EQU #41
; .SET_312L EQU #61
; PAL_V_PAGE EQU 09EH
; PAL_SCP EQU 01EH
; ;CNF_PAGE EQU 040H
SYS_PAGE EQU 0FEH
; MODE_PAGE EQU 0FCH
; ;SCR_PAGE EQU 0FDH
; ;PAL_PAGE EQU 0FDH
; KBD_COM EQU 1Bh
; KBD_DAT EQU 1Ah
COM_B EQU 1Bh
; DAT_B EQU 1Ah
COM_A EQU 19h
; DAT_A EQU 18h
LPT1_D EQU 1CH
LPT1_C EQU 1DH
LPT2_D EQU 1EH
LPT2_C EQU 1FH
STC0_C EQU 10H
; STC1_C EQU 11H
; STC2_C EQU 12H
; STC3_C EQU 13H
; RAMD_LET EQU ('R'-'A')
; P_KBD_OUT EQU 0F8H
; P_KBD_IN EQU 0FEH
; RESET_PAGE EQU #A0
; ;----------[CMOS Registers]-------------
; CMOSREGS.ScreenSET EQU #1A
; ; %0000 1111 - COLOR STYLE For Setup
; ; %0011 0000 - Frame Int (Default/Pentagon/Scorpion/Original)
; ; %1100 0000 - Screen V-Sinc (Default/312 lines 50 HZ/320 Lines 49 Hz)
; SCREEN_HZ EQU #C0
; SCREEN_INT EQU #30
; ;---------------------------------------
; ;***************************************
; ;HD_HEADS EQU 5
; HD_CS EQU 0A0H
; ;HD_S_P_T EQU 17
; ;HD_S_X_H EQU (HD_S_P_T * HD_HEADS) ; ??? ç¨á«® ᥪâ®à®¥ ­  樫¨­¤à¥
P_DATS EQU 050H ; READ/WRITE INIR/OTIR
P_ERR EQU 051H ; READ
; P_PREC EQU 151H ; WRITE
P_S_CNT EQU 152H ;
P_S_NUM EQU 153H
P_C_LOW EQU 154H
P_C_HIG EQU 155H ;<-\
P_HD_CS EQU 4152H ;<-/
P_HDST EQU 4053H ; READ
P_CMD EQU 4153H ; WRITE
; P_HD3F6 EQU 4154H ; WRITE 3F6
; P_HD3F7 EQU 4055H ; READ 3F7
; ;***************************************
CMOS_DRD equ 0FFBDh
CMOS_DWR equ 0BFBDh
CMOS_AWR equ 0DFBDh
ISA_PORT equ 09FBDh
; ;***************************************
SEC_SIZE EQU 11
CLAST_SIZE EQU 13
RESERV_SECS EQU 14
FATS_NUM EQU 16
FLS_NUM EQU 17
; S_P_D EQU 19
FORM_CODE EQU 21
S_P_F EQU 22
S_P_T EQU 24
H_P_S EQU 26
SPECIAL_SECS EQU 28
FAT_ID EQU 36H
; ;***************************************
; SYSTEM_ID EQU 0C020H
SYS_SP EQU 0C0FEH ; „Ž<E2809E>Ž<C5BD>ˆœ<E280B9>‰ ‘’…Š
DISK_TYPE EQU 0C100H ; ¯¥à¥ ¤à¥á æ¨ï ¤¨áª®¢
COPY_PAGE0 EQU 0C104H ; ª®¯¨¨ §­ ç¥­¨© ¯®à⮢ áâà ­¨æ
COPY_PAGE1 EQU 0C105H
COPY_PAGE2 EQU 0C106H
COPY_PAGE3 EQU 0C107H
; RAMD_VARS EQU 0C108H ; ¯¥à¥¬¥­­ë¥ RAM-¤¨áª®¢
; A_RAMD_VARS EQU 0C118H ; ⥪ã騩 RAM-Disk
SP_SAVE EQU 0C11AH ; ¬¥áâ® ¤«ï á®åà ­¥­¨ï  ¤à¥á  á⥪ 
; ERR_SAVE EQU 0C11CH
COPY_RGADR EQU 0C11DH
; RAM_MSD EQU 0C11EH ; áâà ­¨æ  ¤«ï à ¡®âë ¢ MS-DOS
MSD_SECS EQU 0C11FH ; —¨á«® ᥪâ®à®¢ ¢ MS-DOS
; MSD_NAME EQU 0C120H ; €¤à¥á ¨¬¥­¨ ­ ©¤¥­­®£® ä ©« 
; MSD_FAT_SEC EQU 0C122H ; ­ ç «ì­ë© ᥪâ®à FAT
; INT_ADRESS EQU #C124 ;  ¤à¥á ®¡à ¡®â稪  ¯à¥à뢠­¨ï
; INT_PAGE EQU #C126 ; áâà ­¨æ  á ®¡à ¡®â稪®¬ ¯à¥à뢠­¨ï
; INT_ID EQU #C127 ; ¥á«¨ = #AA - §­ ç¨âì ®¡à ¡®â稪 ãáâ ­®¢«¥­
DS_1440 EQU 0C128H ; ä« £¨ ¯¥à¥ª«î祭¨ï 720/1440
F_P_S EQU 0C129H ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥
S_P_C EQU 0C12AH ; ç¨á«® ᥪâ®à®¢ ª â «®£ 
COUNT_FL EQU 0C12BH ; áç¥â稪 ä ©«®¢ ¢ ᥪâ®à¥
COUNT_SEC EQU 0C12CH ; áç¥â稪 ᥪâ®à®¢ ¢ ª â «®£¥
; C_P_B EQU 0C12DH ; ç¨á«® ª« áâ¥à®¢ ­  ¡«®ª އ“
; ;CLASTER_LEN EQU 0C12EH ; ¤«¨­  ª« áâ¥à  ¢ ¡ ©â å
FAT_FLAG EQU 0C130H ; FAT ä« £ + FAT sector
MSD_CONT_SEC EQU 0C132H ; ⥪ã騩 ᥪâ®à ¤«ï MS-DOS
MSD_CONT_SEC2 EQU 0C134H
S_X_H EQU 0C136H ; ª®«¨ç¥á⢮ ᥪâ®à®¢ ­  樫¨­¤à¥
CONFIG_ALL EQU 0C138H ; ®¯¨á â¥«ì ª®­ä¨£ãà æ¨¨ 2 ¡ ©â 
CONFIG_DE EQU 0C13AH ; ®¯¨á â¥«ì ª®­ä¨£ãà æ¨¨ 2 ¡ ©â 
CONFIG_BYTE EQU 0C13EH ; ¡ ©â ª®­ä¨£ãà æ¨¨
WIN_MAP_SC EQU 0C140H
; WIN_TAB_SC EQU 0C142H
; WIN_SAV_HL EQU 0C144H
; WIN_SAV_DE EQU 0C146H
; WIN_SAV_BC EQU 0C148H
WIN_ZG EQU 0C14AH
; WIN_PLACE_WIN EQU 0C14CH
; WIN_GR_MAP EQU 0C14EH
SYS_WORK1 EQU 0C150H
; SYS_WORK2 EQU 0C152H
; SYS_WORK3 EQU 0C154H
; SYS_WORK4 EQU 0C156H
; WIN_MAP_LAB1 EQU 0C158H
WIN_MODE_SH EQU 0C15CH
WIN_MODE_SC EQU 0C15EH
MSD_FAT_SEC EQU 0C160H ; ­ ç «ì­ë© ᥪâ®à FAT
MSD_FAT_SEC2 EQU 0C162H ; ­ ç «ì­ë© ᥪâ®à FAT
MSD_CAT_SEC EQU 0C164H ; ­ ç «ì­ë© ᥪâ®à CAT
MSD_CAT_SEC2 EQU 0C166H ; ­ ç «ì­ë© ᥪâ®à CAT
MSD_DAT_SEC EQU 0C168H ; ­ ç «ì­ë© ᥪâ®à DAT
MSD_DAT_SEC2 EQU 0C16AH ; ­ ç «ì­ë© ᥪâ®à DAT
CLASTER_LEN EQU 0C16CH ; ¤«¨­  ª« áâ¥à  ¢ ¡ ©â å
CLASTER_LEN2 EQU 0C16EH ; ¤«¨­  ª« áâ¥à  ¢ ¡ ©â å
; ;---------------------------------------------
; ; vsync:
; ; bit0 1 - 320L, 0 - 312L
; ; bit1 1 - no waits, 0 - original waits
; VSyncAndWaits EQU #C170
; ;---------------------------------------------
; ;CMOS_FLAG_1 EQU 0C170H
; GR_BIT_END EQU 7
; S_BIT_END EQU 7
; S_BIT_LIN EQU 6
; S_BIT_MOD EQU 5
; BIT_1440 EQU 1
BIT_MASK_1440 EQU 00000010B
RAMD_KEYS EQU 0C180H ; ª«îç¨ RAM-Disks
RAMD_KEY_NUM EQU 16
; LIB_TABLE EQU 0C1A0H ; â ¡«¨æë librares 32 ¡ ©â 
; ; +0 ¡¨¡«¨®â¥ª  DOS
; ;
; HDD_INI_TABLE EQU 0C1C0H ; â ¡«¨æë ¤«ï ide ãáâனá⢠32 ¡ ©â 
; ; 0 - ª®¯¨ï DRV_HEAD
; ; 1 - ᥪâ®à®¢ ­  ¤®à®¦ª¥
; ; 2 - ç¨á«® £®«®¢®ª
; ; 3 - ª®«¨ç¥á⢮ 樫¨­¤à®¢ ¬«.
; ; 4 - ª®«¨ç¥á⢮ 樫¨­¤à®¢ áâ à訩.
; ; 5 - ᥪâ®à®¢ ­  樫¨­¤à ¬«.
; ; 6 - ᥪâ®à®¢ ­  樫¨­¤à áâ àè.
; ; 7 - reserv - type
; ;
; FDD_INI_TABLE EQU 0C1E0H ; â ¡«¨æë ¤«ï FDD ãáâனá⢠32 ¡ ©â 
RAMD_FAT EQU 0C200H ; à á¯®«®¦¥­¨¥ ¡«®ª®¢ RAM-Disk-®¢
MS_BPB EQU 0C400H ; ¡ãä¥à BPB
MS_DIR EQU 0C800H ; ¡ãä¥à DIR sector
MS_FAT EQU 0CC00H ; ¡ãä¥à FAT sector
; MS_BUF EQU 0D000H ; ¡ãä¥à DAT sector
HD_IDF_ADR EQU #C600
; .heads EQU HD_IDF_ADR+6
; .sectors EQU HD_IDF_ADR+12
; .sec_cyl EQU HD_IDF_ADR+4
WIN_MAP_IX EQU 0E000H ; ¤ ­­ë¥ ª àâ ®ª®­
TASK_DATA EQU 0EC00H ; ¤ ­­ë¥ ¤«ï § ¤ ç
; ; ***** - Žª®­­ë¥ ¯¥à¥¬¥­­ë¥ - *****
WIN_SIZE_H EQU 0 ; £®à¨§®­â «ì­ë© à §¬¥à ¢ §­ ª®¬¥áâ å
WIN_SIZE_V EQU 1 ; ¢¥à⨪ «ì­ë© à §¬¥à ¢ §­ ª®¬¥áâ å
WIN_PLACE_H EQU 2 ; ¯®«®¦¥­¨¥ ¯® £®à¨§®­à «¨, ¢ §­ ª®¬¥áâ å
WIN_PLACE_V EQU 3 ; ¯®«®¦¥­¨¥ ¯® ¢¥à⨪ «¨ ¢ §­ ª®¬¥áâ å
WIN_MODE EQU 4 ; ०¨¬ §­ ª®¬¥áâ 
WIN_MODE_S EQU 5 ; ¤®¯®«­¨â¥«ì­ë© ०¨¬
; ; ¡¨â 0 - Sp-SCR,
WIN_GR_X EQU 6 ; ¯®«®¦¥­¨¥ ¯® X ¢ ¯®«¥ £à ä¨ª¨ (¯® §­ ª®¬¥áâ)
WIN_GR_Y EQU 7 ; ¯®«®¦¥­¨¥ ¯® Y ¢ ¯®«¥ £à ä¨ª¨ (¯® §­ ª®¬¥áâ)
WIN_HL EQU 8 ; á®åà ­¥­¨¥ HL
WIN_BC EQU 10 ; á®åà ­¥­¨¥ BC
WIN_DE EQU 12 ; á®åà ­¥­¨¥ DE
WIN_V_BEG EQU 14 ; ­ ç «® ®ª­  ¯® ¢¥à⨪ «¨
WIN_V_END EQU 15 ; ª®­¥æ ®ª­  ¯® ¢¥à⨪ «¨
WIN_H_BEG EQU 16 ; ­ ç «® ®ª­  ¯® £®à¨§®­â «¨
WIN_H_END EQU 17 ; ª®­¥æ ®ª­  ¯® £®à¨§®­â «¨
WIN_SIZE_REL EQU 18 ; ॠ«ì­ë© à §¬¥à ¢ ᨬ¢®« å
WIN_MODE_E EQU 19 ; ¤®¯®«­¨â¥«ì­ë© ०¨¬ íªà ­ 
WIN_WORK_1 EQU 20 ; à ¡®ç ï ¯¥à¥¬¥­­ ï 1
WIN_WORK_2 EQU 21 ; à ¡®ç ï ¯¥à¥¬¥­­ ï 2
WIN_GRAF_X EQU 24 ; ­ ç «ì­ ï ª®®à¤¨­ â  ¯® X
WIN_GRAF_Y EQU 26 ; ­ ç «ì­ ï ª®®à¤¨­ â  ¯® Y
; USER_VARS EQU 0F000h ; ¯¥à¥¬¥­­ë¥ ¯®«ì§®¢ â¥«¥©
; ;SW_ROM EQU 3CF9H
; ; IF .PROJ4
; ;RGADR EQU 0D0H
; ;RGSCR EQU 0D1H
; ;RGMOD EQU 0D2H
; ;RGACC EQU 0D3H
; ;PGACC EQU 0FCH
; ;PAGE0 EQU 0C0H
; ;PAGE1 EQU 0C5H
; ;PAGE2 EQU 0C2H
; ;PAGE3 EQU 0C0H
; ; ELSE
; ; ENDIF
PAGE0 EQU 082H
PAGE1 EQU 0A2H
PAGE2 EQU 0C2H
PAGE3 EQU 0E2H
; ;RGADR EQU 089H
; ;RGSCR EQU 0A9H
; ;RGMOD EQU 099H
; ;RGACC EQU 0B9H
RGADR EQU #89
; PORT_Y EQU #89
; ;RGSCR EQU 0E9H
RGMOD EQU 0C9H
; ;RGACC EQU 0A9H
; ;PGACC EQU 0FCH
CNF_PORT EQU 74h
ALTERA EQU 1400H
WG_COM EQU 00FH
WG_TRK EQU 03FH
WG_SEC EQU 05FH
WG_DATA EQU 07FH
P_DOS_FF EQU 0FFH
; BUFER_RD EQU 5D25H
PR_BUFER EQU 05B00H
AUTO_5B08 EQU 05B08H
AUTO_5B5C EQU 05B5CH
; COPY_P128 EQU 05B5CH
AUTO_5BFF EQU 05BFFH
K_STATE EQU 05C00H
KEY_TIME EQU 05C09H
REP_K_TYME EQU 05C10H
ZG EQU 05C36H
ERR_BEEP EQU 05C38H
; KEY_BEEP EQU 05C39H
ERR_NR EQU 05C3AH
FLAGS EQU 05C3BH
TV_FLAG EQU 05C3CH
ERR_SP EQU 05C3DH
; LIST_SP EQU 05C3FH
; MODE EQU 05C41H
NEW_PPC EQU 05C42H
NEW_S_PPC EQU 05C44H
PPC EQU 05C45H
; SUB_PPC EQU 05C47H
BORDER EQU 05C48H
; EDIT_PPC EQU 05C49H
BAS_VARS EQU 05C4BH
; WORK_VAR EQU 05C4DH
CHANS EQU 05C4FH
CUR_CHL EQU 05C51H
BAS_PROG EQU 05C53H
; NEXT_LINE EQU 05C55H
DATA_ADR EQU 05C57H
E_LINE EQU 05C59H
K_CUR EQU 05C5BH
CH_ADR EQU 05C5DH
; SINT_ER_AD EQU 05C5FH
WORK_SP EQU 05C61H
STK_BOT EQU 05C63H
STK_END EQU 05C65H
; B_REG EQU 05C67H
; MEM_CALC EQU 05C68H
; FLAGS_2 EQU 05C6AH
L_SCR_SIZE EQU 05C6BH
; AUTO_LST_L EQU 05C6CH
; OLD_PPC EQU 05C6EH
; OLD_S_PPC EQU 05C70H
; FLG_INPUT EQU 05C71H
; S_VAR_LEN EQU 05C72H
; SINT_TB_ADR EQU 05C74H
; RAND_SEED EQU 05C76H
; FRAMES EQU 05C78H
UDG EQU 05C7BH
; X_Y_COORD EQU 05C7DH
; PRN_POS EQU 05C7FH
; ADR_PR_BUF EQU 05C80H
; ECHO_E EQU 05C82H
; SCR_PL_M EQU 05C84H
SCR_PL_L EQU 05C86H
; SCR_POS_M EQU 05C88H
SCR_POS_L EQU 05C8AH
; SCROLL_ST EQU 05C8CH
ATTR_P EQU 05C8DH
; MASK_P EQU 05C8EH
ATTR_T EQU 05C8FH
; MASK_E EQU 05C90H
; FLAGS_ATR EQU 05C91H
MEM_BOT EQU 05C92H
AUTO_5C9A EQU 05C9AH
; NMI_ADR EQU 05CB0H
TOP_CLEAR EQU 05CB2H
P_RAMTOP EQU 05CB4H
BEG_ADRESS EQU 05CB6H
RET_INS EQU 05CC2H
AUTO_5CC3 EQU 05CC3H
DISK_A EQU 05CC8H
DISK_B EQU 05CC9H
DISK_C EQU 05CCAH
DISK_D EQU 05CCBH
CAT_SEC EQU 05CCCH
DRV_READY EQU 05CCDH
RD_WR_COM EQU 05CCEH
VAR_1 EQU 05CCFH
AUTO_5CD1 EQU 05CD1H
AUTO_5CD2 EQU 05CD2H
AUTO_5CD3 EQU 05CD3H
AUTO_5CD5 EQU 05CD5H
DOS_ERROR EQU 05CD6H
MED_START EQU 05CD7H
DOS_CH_ADR EQU 05CD9H
MED_LEN EQU 05CDBH
FL_NAME EQU 05CDDH
FL_N_2 EQU 05CDFH
FL_N_4 EQU 05CE1H
FL_N_6 EQU 05CE3H
FL_N_7 EQU 05CE4H
FL_TYPE EQU 05CE5H
FL_START EQU 05CE6H
FL_LEN EQU 05CE8H
START_CLASTER EQU FL_LEN
FL_SIZE EQU 05CEAH
FL_PLACE EQU 05CEBH
VAR_2 EQU 05CEDH
INTERF_I EQU 05CEFH
VAR_2_0 EQU 05CF1H
VAR_2_1 EQU 05CF2H
CONT_SEC EQU 05CF4H
CONT_TRK EQU 05CF5H
OPER_DISK EQU 05CF6H
DOS_FLAG EQU 05CF7H
DISK_1_FLG EQU 05CF8H
DISK_2_FLG EQU 05CF9H
TIME_A EQU 05CFAH
TIME_B EQU 05CFBH
TIME_C EQU 05CFCH
TIME_D EQU 05CFDH
COMAND_WG EQU 05CFEH
SEC_NUM EQU 05CFFH
CONT_BUF_ADR EQU 05D00H
WORK_2 EQU 05D02H
WORK_4 EQU 05D04H
S_NAME_NUM EQU 05D06H
N_DEL_FLS EQU 05D07H
FST_SYM_NAME EQU 05D08H
VAR_3 EQU 05D09H
BUF_FLAG EQU 05D0CH
BAS_DOS_FLG EQU 05D0EH
DOS_ERR_2 EQU 05D0FH
ERR_3D00 EQU 05D10H
ADR_DOS_COM EQU 05D11H
ERR_SP_COPY EQU 05D13H
MSG_FLAG EQU 05D15H
PDOS_COPY EQU 05D16H
FLAG_BOOT EQU 05D17H
INT_1_VAR EQU 05D18H
CONT_DISK EQU 05D19H
ADR_RET EQU 05D1AH
DOS_SP EQU 05D1CH
FL_NUMBER EQU 05D1EH
COM_LN_COPY EQU 05D20H
L_5D23 EQU 05D23H
BUFER EQU 05D25H
AUTO_5D33 EQU 05D33H
CLEAR_SEC EQU 05E06H
CLEAR_TRK EQU 05E07H
TYPE_DISK EQU 05E08H
N_FILES EQU 05E09H
FREE_SEC EQU 05E0AH
CODE_10H EQU 05E0CH
DISK_MRK_1 EQU 05E0FH
DISK_ALT_NM EQU 05E10H
N_DEL_FL EQU 05E19H
DISK_NAME EQU 05E1AH
; ;RET_PAGE0 MACRO
; ; LD A,0
; ; OUT (PAGE0),A
; ; ENDM
; ;RET_PAGE1 MACRO
; ; LD A,5
; ; OUT (PAGE1),A
; ; ENDM
; ;RET_PAGE2 MACRO
; ; LD A,2
; ; OUT (PAGE2),A
; ; ENDM
; ;RET_PAGE3 MACRO
; ; LD A,0
; ; OUT (PAGE3),A
; ; ENDM
; MACRO DSS adr,dt
; BLOCK adr-$,dt
; ENDM
MACRO CALL_48 adr
PUSH HL
LD HL,.ADR_R
PUSH HL
LD HL,SW_ROM
PUSH HL
LD HL,adr
JP JP_HL_48
.ADR_R:
POP HL
ENDM
MACRO CALL_48X adr
PUSH HL
LD HL,.ADR_R
EX (SP),HL
PUSH HL
LD HL,SW_ROM
EX (SP),HL
PUSH HL
LD HL,adr
EX (SP),HL
JP SW_ROM
.ADR_R:
ENDM
; MACRO RAMD_KEY
; SUB 4
; DI
; LD B,SYS_PAGE
; LD C,PAGE3
; OUT (C),B
; LD HL,RAMD_KEYS
; ADD A,L
; LD L,A
; DEC L
; LD (A_RAMD_VARS),HL
; INC L
; LD L,(HL)
; RET_PAGE3
; EI
; LD A,L
; ENDM
; ; <20>®pâë Sprinter. (¡ ©âë PORT_X)<<
; ; 0 - port FF<<
; ; 1 - port keyboard<<
; ; 2 - port BORDER<<
; ; 3 - port 1FFDh<<
; ; 4 - port 7FFDh<<
; ; 5 - port 3FFDh<<
; ; 6 - port Start-ROM<<
; ; 7 - port Start-ROM-ALT<<
; ; 8 - port ROM-BASIC48<<
; ; 9 - port ROM-BASIC128<<
; ; 10 - port ROM-TR-DOS<<
; ; 11 - port ROM-EXPANSION<<
; ; 12 - port ROM-BASIC48-ALT<<
; ; 13 - port ROM-BASIC128-ALT<<
; ; 14 - port ROM-TR-DOS-ALT<<
; ; 15 - port ROM-EXPANSION-ALT<<
; ; 16 Ä¿<<
; ; .. Ä´<<
; ; 31 ÄÁÄports RAM-PAGES - ¯®pâë 㪠§ë¢ î騥, ª ª ï áâp ­¨æ  އ“<<
; ;¯®¤ª«î祭  ¢ ª ç¥á⢥ áâp ­¨æë 0..F ¢ ª®­ä¨£ãp æ¨¨ Scorpion.<<
; ; 33 - port RAM-0 áâp ­¨æ  އ“ ¯®¤ª«îç ¥¬ ï ¢ ­ã«¥¢®¥ ®ª­® ¯p®æ¥áá®p <<
; ; 34 - port RAM-5 áâp ­¨æ  އ“ ¯®¤ª«îç ¥¬ ï ¢ ¯¥p¢®¥ ®ª­® ¯p®æ¥áá®p <<
; ; 35 - port RAM-2 áâp ­¨æ  އ“ ¯®¤ª«îç ¥¬ ï ¢® ¢â®p®¥ ®ª­® ¯p®æ¥áá®p <<
; ; 36 - port CONFIG<<
; ; 37 - port COVOX-1<<
; ; 38 - port COVOX-2<<
; ; 39 - port AY-3-8910-adr<<
; ; 40 - port AY-3-8910-dat<<
; ; 41 - port KEMPSTON<<
; ; 42 - port ISA-interface<<
; ; 43 Ŀreserv<<
; ; .. Ä´<<
; ; 47 ÄÙ<<
; ; 48 - 51 ¯®pâë ƒ93<<
; ; 52 - ¯®pâ DOS-1<<
; ; 53 - ¯®pâ DOS-2<<
; ; 54 Ä¿ á«ã¦¥¡­ë¥ ¯®pâë<<
; ; .. Ä´<<
; ; 63 ÄÙ<<
; ; 64 Ä¿ ¯®pâë IDE interface<<
; ; .. Ä´<<
; ; 79 ÄÙ<<
; ; 80..127 - p¥§¥p¢.<<
; ; 128..143 - ¯®pâë ¨¤¥­â¨ä¨ª â®p  ¬ è¨­ë ( ⮫쪮 ¤«ï ç⥭¨ï.)<<
; ; 144..254 - p¥§¥p¢<<
; ; 255 - ­ã«ì-¯®pâ - ®âª«î祭­®¥ á®áâ®ï­¨¥.<<
; ;

203
inc/char_codes.inc Normal file
View File

@ -0,0 +1,203 @@
; ZX Spectrum char codes
; By Marcos Cruz (programandala.net)
; ---------------------------------------------------------------------
; Characters (new format)
ZX_Char:
; Not used equ 0x00
; Not used equ 0x01
; Not used equ 0x02
; Not used equ 0x03
; Not used equ 0x04
; Not used equ 0x05
.caps equ 0x06 ; toggle caps lock
.print_comma equ 0x06 ; (when printed)
.edit equ 0x07 ; edit
.esc equ 0x07 ; escape
.cursor_left equ 0x08
.backspace equ 0x08
.right equ 0x09 ; cursor right
.cursor_down equ 0x0A
.cursor_up equ 0x0B
.delete_left equ 0x0C ; delete (backspace)
.form_feed equ 0x0C ; used for printing
.carriage_return equ 0x0D ; enter key
.extended_mode equ 0x0E ;
.number equ 0x0E ;
.graphics equ 0x0F ; toggle graphics mode
.ink equ 0x10
.paper equ 0x11
.flash equ 0x12
.bright equ 0x13
.inverse equ 0x14
.over equ 0x15
.at equ 0x16
.tab equ 0x17 ; tab (screen only)
; Not used equ 0x18
; Not used equ 0x19
; Not used equ 0x1A
; Not used equ 0x1B
; Not used equ 0x1C
; Not used equ 0x1D
; Not used equ 0x1E
; Not used equ 0x1F
.space equ 0x20
; Standart symbols
; #21 ! #22 " #23 # #24 $ #25 % #26 & #27 , #28 (
; #29 ) #2A * #2B + #2C , #2D - #2F . #2F / #30 0
; #31 1 #32 2 #33 3 #34 4 #35 5 #36 6 #37 7 #38 8
; #39 9 #3A : #3B ; #3C < #3D = #3E > #3F ? #40 @
; #41 A #42 B #43 C #44 D #45 E #46 F #47 G #48 H
; #49 I #4A J #4B K #4C L #4D M #4E N #4F O #50 P
; #51 Q #52 R #53 S #54 T #55 U #56 V #57 W #58 X
; #59 Y #5A Z #5B [ #5C / #5D ] #5E ^ #5F _ #60 ?
; #61 a #62 b #63 c #64 d #65 e #66 f #67 g #68 h
; #69 i #6A j #6B k #6C l #6D m #6E n #6F o #70 p
; #71 q #72 r #73 s #74 t #75 u #76 v #77 w #78 x
; #79 y #7A z #7B { #7C | #7D } #7E ~
.copyright equ 0x7F ; copyright sign
; ---------------------------------------------------------------------
; User Defined Graphics
; 0 1 2 3 4 5 6 7
;| | | #| |# | |# #| | | | #| |# | |# #|
;| | | | | | | | | #| | #| | #| | #|
; 8 9 A B C D E F
;| | | #| |# | |# #| | | | #| |# | |# #|
;|# | |# | |# | |# | |# #| |# #| |# #| |# #|
ZX_UDG:
.block_0 equ 0x80
.block_1 equ 0x81
.block_2 equ 0x82
.block_3 equ 0x83
.block_4 equ 0x84
.block_5 equ 0x85
.block_6 equ 0x86
.block_7 equ 0x87
.block_8 equ 0x88
.block_9 equ 0x89
.block_A equ 0x8A
.block_B equ 0x8B
.block_C equ 0x8C
.block_D equ 0x8D
.block_E equ 0x8E
.block_F equ 0x8F
.a equ 0x90
.b equ 0x91
.c equ 0x92
.d equ 0x93
.e equ 0x94
.f equ 0x95
.g equ 0x96
.h equ 0x97
.i equ 0x98
.j equ 0x99
.k equ 0x9A
.l equ 0x9B
.m equ 0x9C
.n equ 0x9D
.o equ 0x9E
.p equ 0x9F
.q equ 0xA0
.r equ 0xA1
.s equ 0xA2
.t equ 0xA3 ; token SPECTRUM in 128 basic
.u equ 0xA4 ; token PLAY in 128 basic
; ---------------------------------------------------------------------
; Tokens
ZX_Token
.spectrum equ 0xA3 ; UDG T in 48 basic
.play equ 0xA4 ; UDG U in 48 basic
.rnd equ 0xA5
.inkey_dollar equ 0xA6
.pi equ 0xA7
.fn equ 0xA8
.point equ 0xA9
.screen_dollar equ 0xAA
.attr equ 0xAB
.at equ 0xAC
.tab equ 0xAD
.val_dollar equ 0xAE
.code equ 0xAF
.val equ 0xB0
.len equ 0xB1
.sin equ 0xB2
.cos equ 0xB3
.tan equ 0xB4
.asn equ 0xB5
.acs equ 0xB6
.atn equ 0xB7
.ln equ 0xB8
.exp equ 0xB9
.int equ 0xBA
.sqr equ 0xBB
.sgn equ 0xBC
.abs equ 0xBD
.peek equ 0xBE
.in equ 0xBF
.usr equ 0xC0
.str_dollar equ 0xC1
.chr_dollar equ 0xC2
.not equ 0xC3
.bin equ 0xC4
.or equ 0xC5
.and equ 0xC6
.less_or_equal equ 0xC7
.greater_or_equal equ 0xC8
.not_equal equ 0xC9
.line equ 0xCA
.then equ 0xCB
.to equ 0xCC
.step equ 0xCD
.def_fn equ 0xCE
.cat equ 0xCF
.format equ 0xD0
.move equ 0xD1
.erase equ 0xD2
.open_channel equ 0xD3
.close_channel equ 0xD4
.merge equ 0xD5
.verify equ 0xD6
.beep equ 0xD7
.circle equ 0xD8
.ink equ 0xD9
.paper equ 0xDA
.flash equ 0xDB
.bright equ 0xDC
.inverse equ 0xDD
.over equ 0xDE
.out equ 0xDF
.lprint equ 0xE0
.llist equ 0xE1
.stop equ 0xE2
.read equ 0xE3
.data equ 0xE4
.restore equ 0xE5
.new equ 0xE6
.border equ 0xE7
.continue equ 0xE8
.dim equ 0xE9
.rem equ 0xEA
.for equ 0xEB
.go_to equ 0xEC
.go_sub equ 0xED
.input equ 0xEE
.load equ 0xEF
.list equ 0xF0
.let equ 0xF1
.pause equ 0xF2
.next equ 0xF3
.poke equ 0xF4
.print equ 0xF5
.plot equ 0xF6
.run equ 0xF7
.save equ 0xF8
.randomize equ 0xF9
.if equ 0xFA
.cls equ 0xFB
.draw equ 0xFC
.clear equ 0xFD
.return equ 0xFE
.copy equ 0xFF
; ---------------------------------------------------------------------

1160
inc/rom_routines.inc Normal file

File diff suppressed because it is too large Load Diff

309
inc/system_variables.inc Normal file
View File

@ -0,0 +1,309 @@
; ZX Spectrum system variables
; By Marcos Cruz (programandala.net)
; Last modified: 201803231837
; See change log at the end of the file
; ==============================================================
; ZX Spectrum +3
sys_nmiadd: equ 23728 ; (2)
; The system variable at 5CB0h (23728) was documented on previous models of the
; Spectrum as 'Not used'. It is now used on the +3 as an NMI jump vector. If an
; NMI occurs, this address is checked. If it contains a 0, then no action is
; taken. However, for any other (non-zero) value, a jump will be made to the
; address given by this variable. NMIs must not occur while the disk system is
; active.
SWAP_ROM: equ 23296 ; (0x5B00) (R16)
; Paging subroutine.
sys_stoo: equ 23312 ; (0x5B10) (R17)
; Paging subroutine. Entered with
; interrupts already disabled and AF, BC
; on the stack.
sys_younger: equ 23329 ; (0x5B21) (R9)
; Paging subroutine.
sys_regnuoy: equ 23338 ; (0x5B2A) (R16)
; Paging subroutine.
sys_onerr: equ 23354 ; (0x5B3A) (R24)
; Paging subroutine.
sys_oldhl: equ 23378 ; (0x5B52) (X2)
; Temporary register store while
; switching ROMs.
sys_oldbc: equ 23380 ; (0x5B54) (X2)
; Temporary register store while
; switching ROMs.
sys_oldaf: equ 23382 ; (0x5B56) (X2)
; Temporary register store while
; switching ROMs.
sys_target: equ 23384 ; (0x5B58) (N2)
; Subroutine address in ROM 3.
sys_retaddr: equ 23386 ; (0x5B5A) (X2)
; Return address in ROM 1.
sys_bankm: equ 23388 ; (0x5B5C) (X1)
; Copy of last byte output to I/O
; port 7FFDh (32765). This port
; is used to control the RAM
; paging (bits 0..2: page 0..7),
; screen selection (bit 3:
; 0=normal, 1=shadow),
; 'horizontal' ROM switch (bit 4:
; 0=128k editor, 1=48k BASIC) and
; added I/O disabling (bit 5).
; the This byte must be kept up
; to date with the last value
; output to the port if
; interrupts are enabled.
sys_ramrst: equ 23389 ; (0x5B5D) (X1)
; RST 8 instruction. Used by ROM 1 to
; report old errors to ROM 3.
sys_ramerr: equ 23390 ; (0x5B5E) (N1)
; Error number passed from ROM 1 to ROM
; 3. Also used by SAVE/LOAD as temporary
; drive store.
sys_baud: equ 23391 ; (0x5B5F) (2)
; RS232 bit period in T states/26. Set
; by FORMAT LINE.
sys_serfl: equ 23393 ; (0x5B61) (N2)
; Second-character-received-flag, and
; data.
sys_col: equ 23395 ; (0x5B63) (N1)
; Current column from 1 to width.
sys_width: equ 23396 ; (0x5B64) (1)
; Paper column width. Defaults to 80.
sys_tvpars: equ 23397 ; (0x5B65) (1)
; Number of inline parameters expected
; by RS232
sys_flags3: equ 23398 ; (0x5B66) (1)
; Various flags. Bits 0, 1, 6 and 7
; unlikely to be useful. Bit 2 is set
; when tokens are to be expanded on
; printing. Bit 3 is set if print output
; is RS232. The default (at reset) is
; Centronics. Bit 4 is set if a disk
; interface is present. Bit 5 is set if
; drive B: is present.
sys_bank678: equ 23399 ; (0x5B67) (X1)
; Copy of last byte output to I/O port
; 1FFDh (8189). This port is used to
; control the +3 extended RAM and ROM
; switching (bits 0..2 - if bit 0 is 0
; then bit 2 controls the 'vertical' ROM
; switch 02 and 13), the disk
; motor (bit 3) and Centronics strobe
; (bit 4). This byte must be kept up to
; date with the last value output to the
; port if interrupts are enabled.
sys_xloc: equ 23400 ; (0x5B68) (N1)
; Holds X location when using the
; unexpanded COPY command.
sys_yloc: equ 23401 ; (0x5B69) (N1)
; Holds Y location when using the
; unexpanded COPY command.
sys_oldsp: equ 23402 ; (0x5B6A) (X2)
; Old SP (stack pointer) when TSTACK is
; in use.
sys_synret: equ 23404 ; (0x5B6C) (X2)
; Return address for ONERR.
sys_lastv: equ 23406 ; (0x5B6E) (5)
; Last value printed by calculator.
sys_rcline: equ 23411 ; (0x5B73) (2)
; Current line being renumbered.
sys_rcstart: equ 23413 ; (0x5B75) (2)
; Starting line number for
; renumbering. The default value is 10.
sys_rcstep: equ 23415 ; (0x5B77) (2)
; Incremental value for renumbering. The
; default is 10.
sys_loddrv: equ 23417 ; (0x5B79) (1)
; Holds 'T' if LOAD, VERIFY, MERGE are
; from tape, otherwise holds 'A', 'B'
; or 'M'.
sys_savdrv: equ 23418 ; (0x5B7A) (1)
; Holds 'T' if SAVE is to tape,
; otherwise holds 'A', 'B' or 'M'.
sys_dumplf: equ 23419 ; (0x5B7B) (1)
; Holds the number of 1/216ths user for
; line feeds in 'COPY EXP'. This is
; normally set to 9. If problems are
; experienced fitting a dump onto a
; sheet of A4 paper, POKE this
; location with 8. This will reduce the
; size of the dump and improve the
; aspect ratio slightly. (The quality of
; the dump will be marginally degraded,
; however.)
sys_strip1: equ 23420 ; (0x5B7C) (N8)
; Stripe one bitmap.
sys_strip2: equ 23428 ; (0x5B84) (N8)
; Stripe two bitmap. This extends to
; 5B8Bh (23436).
sys_tstack: equ 23551 ; (0x5BFF) (X115)
; Temporary stack grows down from
; here. Used when RAM page 7 is switched
; in at top of memory (while executing
; the editor or calling +3DOS). it may
; safely go down to 5B8Ch (and across
; STRIP1 and STRIP2 if necessary). This
; guarantees at least 115 bytes of stack
; when BASIC calls +3DOS.
; ==============================================================
; ZX Spectrum 48K
sys_printer_buffer: equ 23296 ; (0x5B00)
sys_kstate: equ 23552 ; (n8) Used in reading the keyboard.
sys_kstate.1: equ 23553
sys_kstate.2: equ 23554
sys_kstate.3: equ 23555
sys_kstate.4: equ 23556
sys_kstate.5: equ 23557
sys_kstate.6: equ 23558
sys_kstate.7: equ 23559
sys_last_k: equ 23560 ; (nl) Stores newly pressed key.
sys_last_key: equ 23560
sys_repdel: equ 23561 ; (1) Time (in 50ths of a second
; in 60ths of a second in N. America) that a key must
; be held down before it repeats.
; This starts off at 35, but you can POKE in other values.
sys_repper: equ 23562 ; (1) Delay (in 50ths of a second in 60ths of a second
; in N. America) between successive repeats
; of a key held down: initially 5.
sys_defadd: equ 23563 ; (n2) Address of arguments of user defined function
; if one is being evaluated; otherwise 0.
sys_k_data: equ 23565 ; (nl) Stores 2nd byte of colour controls
; entered from keyboard.
sys_tvdata: equ 23566 ; (n2) Stores bytes of colour, AT and TAB controls
; going to television.
sys_tvdata2: equ 23567
sys_tvdata.high: equ 23567
sys_strms: equ 23568 ; (x38) Addresses of channels attached to streams.
sys_chars: equ 23606 ; (2) 256 less than address of character set
sys_rasp: equ 23608 ; (1) Length of warning buzz.
sys_pip: equ 23609 ; (1) Length of keyboard click.
; sys_err_nr is pointed by IY
sys_err_nr: equ 23610 ; (1) 1 less than the report code.
; Starts off at 255 (for 1) so PEEK 23610 gives 255.
sys_flags: equ 23611 ; (x1) Various flags to control the BASIC system.
sys_tv_flag: equ 23612 ; (x1) Flags associated with the television.
sys_err_sp: equ 23613 ; (x2) Address of item on machine stack
; to be used as error return.
sys_list_sp: equ 23615 ; (n2) Address of return address from automatic listing.
sys_mode: equ 23617 ; (n1) Specifies K, L, C. E or G cursor.
sys_newppc: equ 23618 ; (2) Line to be jumped to.
sys_nsppc: equ 23620 ; (1) Statement number in line to be jumped to.
; Poking first NEWPPC and then NSPPC
; forces a jump to a specified statement in a line.
sys_ppc: equ 23621 ; (2) Line number of statement currently being executed.
sys_subppc: equ 23623 ; (1) Number within line of statement being executed.
sys_bordcr: equ 23624 ; (1) Border colour * 8; also contains the attributes
; normally used for the lower half of the screen.
sys_e_ppc: equ 23625 ; (2) Number of current line (with program cursor).
sys_vars: equ 23627 ; (x2) Address of variables.
sys_dest: equ 23629 ; (n2) Address of variable in assignment.
sys_chans: equ 23631 ; (x2) Address of channel data.
sys_curchl: equ 23633 ; (x2) Address of information currently being used
; for input and output.
sys_prog: equ 23635 ; (x2) Address of BASIC program.
sys_nxtlin: equ 23637 ; (x2) Address of next line in program.
sys_datadd: equ 23639 ; (x2) Address of terminator of last DATA item.
sys_e_line: equ 23641 ; (x2) Address of command being typed in.
sys_k_cur: equ 23643 ; (2) Address of cursor.
sys_ch_add: equ 23645 ; (x2) Address of the next character to be interpreted.
sys_x_ptr: equ 23647 ; (2) Address of the character after the ? marker.
sys_worksp: equ 23649 ; (x2) Address of temporary work space.
sys_stkbot: equ 23651 ; (x2) Address of bottom of calculator stack.
sys_stkend: equ 23653 ; (x2) Address of start of spare space.
sys_breg: equ 23655 ; (n1) Calculator's b register.
sys_mem: equ 23656 ; (n2) Address of area used for calculator's memory.
; (Usually MEMBOT, but not always.)
sys_flags2: equ 23658 ; (1) More flags.
sys_df_sz: equ 23659 ; (x1) The number of lines (including one blank line)
; in the lower part of the screen.
sys_s_top: equ 23660 ; (2) The number of the top program line in automatic listings.
sys_oldppc: equ 23662 ; (2) Line number to which CONTINUE jumps.
sys_ospcc: equ 23664 ; (1) Number within line of statement
; to which CONTINUE jumps.
sys_flagx: equ 23665 ; (n1) Various flags.
sys_strlen: equ 23666 ; (n2) Length of string type destination in assignment.
sys_t_addr: equ 23668 ; (n2) Address of next item in syntax table
; (very unlikely to be useful).
sys_seed: equ 23670 ; (2) The seed for RND.
; This is the variable that is set by RANDOMIZE.
sys_frames: equ 23672 ; (3) 3 byte (least significant first), frame counter.
; Incremented every 20ms.
sys_udg: equ 23675 ; (2) Address of 1st user defined graphic.
sys_coords: equ 23677 ; (2) coordinates of last point plotted.
sys_coordx: equ 23677 ; (1) x-coordinate of last point plotted.
sys_coordy: equ 23678 ; (1) y-coordinate of last point plotted.
sys_p_posn: equ 23679 ; (1) 33 column number of printer position
sys_pr_cc: equ 23680 ; (1) Less significant byte of address
; of next position for LPRINT to print at
; (in printer buffer).
sys_unused0: equ 23681 ; (1) Not used.
sys_echo_e: equ 23682 ; (2) 33 column number and 24 line number
; (in lower half) of end of input buffer.
sys_df_cc: equ 23684 ; (2) Address in display file of PRINT position.
sys_dfccl: equ 23686 ; (2) Like DF CC for lower part of screen.
sys_s_posn: equ 23688 ; (x2) 33 column and 24 line number for PRINT position
sys_s_posx: equ 23688 ; (x1) 33 column number for PRINT position
sys_s_posy: equ 23689 ; (x1) 24 line number for PRINT position.
sys_s_posn2: equ 23689
sys_sposnl: equ 23690 ; (x2) Like S POSN for lower part
sys_scr_ct: equ 23692 ; (1) Counts scrolls:
; it is always 1 more than the number of scrolls that
; will be done before stopping with scroll? If you keep
; poking this with a number bigger than 1 (say 255), the
; screen will scroll on and on without asking you.
sys_attr_p: equ 23693 ; (1) Permanent current colours, etc
; (as set up by colour statements).
sys_mask_p: equ 23694 ; (1) Used for transparent colours, etc.
; Any bit that is 1 shows that the corresponding
; attribute bit is taken not from ATTR P, but from what
; is already on the screen.
sys_attr_t: equ 23695 ; (n1) Temporary current colours, etc
; (as set up by colour items).
sys_mask_t: equ 23696 ; (n1) Like MASK P, but temporary.
sys_p_flag: equ 23697 ; (1) More flags.
sys_membot: equ 23698 ; (n30) Calculator's memory area;
; used to store numbers that cannot
; conveniently be put on the calculator stack.
sys_unused1: equ 23728 ; (1) Not used.
sys_unused2: equ 23729 ; (1) Not used.
sys_ramtop: equ 23730 ; (2) Address of last byte of BASIC system area.
sys_p_ramt: equ 23732 ; (2) Address of last byte of physical RAM.
sys_p_ramt.high: equ 23733
; ==============================================================
; Change log
; 2014-12-17: Converted from the HTML version of the ZX Spectrum manual, with
; the help of Vim. Regulary improved afterwards.
;
; 2015-01-12: New: first two ZX Spectrum +3 variables.
;
; 2015-01-15: New: 'sys_flags3'.
;
; 2015-01-16: New: all ZX Spectrum +3 variables.
;
; 2015-05-24: Changes to make the file usable as symbols input file by
; z80dasm.
;
; 2015-09-06: Offset extracted to <zx_spectrum_system_variables_offsets.z80s>,
; because the z80dasm disassembler does not accept calculations in its input
; symbols file.
;
; 2016-08-05: Remove useless comment.
;
; 2016-08-15: Add individual bytes of sys_k_state; the second one is addressed
; by TR-DOS 5.03.
;
; 2018-03-09: Add `sys_printer_buffer`.
;
; 2018-03-23: Add `sys_tvdata.high`.

29
inc/trdos.inc Normal file
View File

@ -0,0 +1,29 @@
; ZX Spectrum TR-DOS
; By Marcos Cruz (programandala.net)
; --------------------------------------------------------------
; History
; 2016-08-13: Start, from information compiled for Solo Forth
; (http://programandala.net/en.program.solo_forth.html).
;
; 2016-09-01: Add drive step rate variables.
;
; 2016-10-01: Complete the variables and entry points. Identify
; unknown variable 23817.
;
; 2017-02-05: Update name of variable 23766, which is used for
; two different things. Add symbols for error codes.
;
; 2017-02-10: Add synonymous of command 0x0E. Fix typo in
; symbol. Add first draft of sector buffer addresses.
;
; 2017-02-10: Split the file in two: addresses and codes. The
; reason is to be able to use only the addresses as input in
; the TR-DOS disassembled project.
; --------------------------------------------------------------
include "inc/zx_spectrum_trdos_addresses.z80s"
include "inc/zx_spectrum_trdos_codes.z80s"

184
inc/trdos_addresses.inc Normal file
View File

@ -0,0 +1,184 @@
; ZX Spectrum TR-DOS addresses
; By Marcos Cruz (programandala.net)
; --------------------------------------------------------------
; History
; 2017-02-10: Extract from the main file: entry points,
; variables and sector buffer addresses.
;
; 2017-03-08: Rename `trdos_variable.file_size` to
; `trdos_variable.stream_or_file_size`.
;
; 2017-03-09: Improve name of variable 23814.
; --------------------------------------------------------------
; TR-DOS entry points
trdos_entry.enter_trdos_from_basic: equ 15616 ; 0x3D00
trdos_entry.interpret_rem_command: equ 15619 ; 0x3D03
; Interpret a TR-DOS REM-command pointed by the system variable CH
; ADD (23645).
;
; XXX REMARK -- The Beta Disk and Beta 128 Disk manuals use address
; 15363 in the assembly examples, but it's a mistake. In fact 15363
; (0x3C03) is out of the range of addresses that make the TR-DOS
; memory page in (0x3D00..0x3DFF). Probably the confusion was caused
; by a typo in hex (0x3D03 and 0x3C03).
trdos_entry.execute_command_in_c: equ 15635 ; 0x3D13
; Execute a TR-DOS command, whose code is in the C register.
entry.init_dos: equ 15649 ; 0x3D21
trdos_entry.call_pushed_address: equ 15663 ; 0x3D2F
; Execute the TR-DOS routine whose address is on top of stack.
; trdos_entry.XXX equ 15622 ; 0x3D06
; trdos_entry.XXX equ 15629 ; 0x3D0D
; trdos_entry.XXX equ 15632 ; 0x3D10
; trdos_entry.XXX equ 15652 ; 0x3D24
; --------------------------------------------------------------
; TR-DOS variables
trdos_variable.interface_1_zone: equ 23734
trdos_variable.0xc9: equ 23746
trdos_variable.unknown_23747: equ 23747
trdos_variable.drive_a_mode: equ 23752
trdos_variable.drive_b_mode: equ 23753
trdos_variable.drive_c_mode: equ 23754
trdos_variable.drive_d_mode: equ 23755
trdos_variable.cat_current_sector: equ 23756
trdos_variable.disk_drive_ready: equ 23757
trdos_variable.sector_rw_flag: equ 23758
trdos_variable.stack_sp_copy: equ 23759
trdos_variable.basic_program_autostart: equ 23761
trdos_variable.basic_program_autostart.high: equ 23762
trdos_variable.unknown_23763: equ 23763
trdos_variable.move_command_deleted_files: equ 23764
trdos_variable.move_command_first_sector: equ 23765
trdos_variable.bad_sectors_or_move_command_first_track: equ 23766
trdos_variable.start_file_parameter_or_number_of_tracks: equ 23767
trdos_variable.start_file_parameter.high: equ 23768
trdos_variable.ch_add: equ 23769
trdos_variable.ch_add.high: equ 23770
trdos_variable.stream_or_file_size: equ 23771
trdos_variable.file_size.high: equ 23772
trdos_variable.filename: equ 23773
trdos_variable.filename.1: equ 23774
trdos_variable.filename.2: equ 23775
trdos_variable.filename.3: equ 23776
trdos_variable.filename.4: equ 23777
trdos_variable.filename.5: equ 23778
trdos_variable.filename.6: equ 23779
trdos_variable.filename.7: equ 23780
trdos_variable.file_type: equ 23781
trdos_variable.file_start: equ 23782
trdos_variable.file_start.high: equ 23783
trdos_variable.file_length_in_bytes: equ 23784
trdos_variable.file_length_in_bytes.high: equ 23785
trdos_variable.file_length_in_sectors: equ 23786
trdos_variable.file_first_sector: equ 23787
trdos_variable.file_first_track: equ 23788
trdos_variable.c_file_start_or_b_file_size: equ 23789
trdos_variable.file_2_length_in_bytes: equ 23791
trdos_variable.file_2_length_in_sectors: equ 23793
trdos_variable.file_2_first_sector: equ 23794
trdos_variable.file_2_first_track: equ 23795
trdos_variable.current_sector: equ 23796
trdos_variable.current_track: equ 23797
trdos_variable.current_temporary_drive: equ 23798
trdos_variable.cleared: equ 23799
trdos_variable.two_files_drive: equ 23800
trdos_variable.cat_drive_or_read_verify_flag: equ 23801
trdos_variable.drive_a_step_rate: equ 23802
trdos_variable.drive_b_step_rate: equ 23803
trdos_variable.drive_c_step_rate: equ 23804
trdos_variable.drive_d_step_rate: equ 23805
trdos_variable.last_fdc_command: equ 23806
trdos_variable.sector: equ 23807
trdos_variable.buffer: equ 23808
trdos_variable.hl_copy: equ 23810
trdos_variable.de_copy: equ 23812
trdos_variable.bytes_compared_by_find_command: equ 23814
trdos_variable.deleted_files: equ 23815
trdos_variable.filename_first_char: equ 23816
trdos_variable.data_file_mode: equ 23817
trdos_variable.buffer_flag: equ 23820
trdos_variable.file_number_for_copying: equ 23821
trdos_variable.command_mode: equ 23822
trdos_variable.error_code: equ 23823
trdos_variable.error_code_msb: equ 23824
trdos_variable.command_line_address: equ 23825
trdos_variable.err_sp_copy: equ 23827
trdos_variable.show_screen_flag: equ 23829
trdos_variable.system_register: equ 23830
trdos_variable.show_title_flag: equ 23831
trdos_variable.interface_1_flag: equ 23832
trdos_variable.default_drive: equ 23833
trdos_variable.internal_address_of_finishing_proc: equ 23834
trdos_variable.sp_copy: equ 23836
trdos_variable.find_command_found_file: equ 23838
trdos_variable.unknown_23839: equ 23839
trdos_variable.entered_line_3_first_chars: equ 23840
trdos_variable.entered_line_3_first_chars.1: equ 23841
trdos_variable.entered_line_3_first_chars.2: equ 23842
trdos_variable.move_command_blocks: equ 23843
trdos_variable.tmp_buffer_address: equ 23845
trdos_variable.k_channel.output: equ 23846
trdos_variable.k_channel.input: equ 23848
trdos_variable.k_channel.id: equ 23850
trdos_variable.s_channel.output: equ 23851
trdos_variable.s_channel.input: equ 23853
trdos_variable.s_channel.id: equ 23855
trdos_variable.r_channel.output: equ 23856
trdos_variable.r_channel.input: equ 23858
trdos_variable.r_channel.input.high: equ 23859
trdos_variable.r_channel.id: equ 23860
trdos_variable.p_channel.output: equ 23861
trdos_variable.p_channel.input: equ 23863
trdos_variable.p_channel.id: equ 23865
; --------------------------------------------------------------
; TR-DOS sector buffer
trdos_sector_buffer: equ 0x5D25
; 256-byte sector buffer
; Addresses of the 8th sector of track 0, which contains the
; disk metatada, when it's loaded in the sector buffer:
trdos_sector_buffer.sectors: equ 0x5D04
; 2 B: total number of sectors
trdos_sector_buffer.next_free_sector: equ 0x5E06
; 1 B: Next free sector (0 index, 0 default)
trdos_sector_buffer.next_free_track: equ 0x5E07
; 1 B: Next free track
trdos_sector_buffer.disk_type: equ 0x5E08
; 1 B: disk type:
; 0x16 - 80 tracks, 2 sides
; 0x17 - 40 tracks, 2 sides
; 0x18 - 80 tracks, 1 side
; 0x19 - 40 tracks, 1 side
trdos_sector_buffer.files: equ 0x5E09
; 1 B: Number of files, including the deleted files
trdos_sector_buffer.free_sectors: equ 0x5E0A
; 2 B: Number of free sectors, depending on the disk type:
; 2544 = 0x09F0 : 80 tracks, 2 sides
; 1264 = 0x04F0 - 40 tracks, 2 sides
; 1264 = 0x04F0 - 80 tracks, 1 side
; 624 = 0x0270 - 40 tracks, 1 side
; 2672 = 0x0A70 - 84 tracks, 2 sides (DCU format)
; 2736 = 0x0AB0 - 86 tracks, 2 sides (DCU format)
trdos_sector_buffer.sectors_per_track: equ 0x5E0C
; 1 B: Number of sectors per track:
; If not 0x10, the disk will not be recognized.
trdos_sector_buffer.deleted_files: equ 0x5E19
; 1 B: Number of deleted files
trdos_sector_buffer.disc_title: equ 0x5E1A
; 8 B: Disk title

53
inc/trdos_codes.inc Normal file
View File

@ -0,0 +1,53 @@
; ZX Spectrum TR-DOS codes
; By Marcos Cruz (programandala.net)
; --------------------------------------------------------------
; History
; 2017-02-10: Extracted from the main file: command and error
; codes.
; --------------------------------------------------------------
; TR-DOS command codes
trdos_command.init_interface: equ 0x00
trdos_command.init_drive: equ 0x01
trdos_command.seek_track: equ 0x02
trdos_command.set_sector: equ 0x03
trdos_command.define_buffer: equ 0x04
trdos_command.read_sectors: equ 0x05
trdos_command.write_sectors: equ 0x06
trdos_command.cat: equ 0x07
trdos_command.read_file_descriptor: equ 0x08
trdos_command.write_file_descriptor: equ 0x09
trdos_command.find_file: equ 0x0A
trdos_command.create_file: equ 0x0B
trdos_command.save_basic_program: equ 0x0C
trdos_command.read_file: equ 0x0E
trdos_command.load_or_verify: equ 0x0E
trdos_command.delete_file: equ 0x12
trdos_command.copy_from_hl_to_descriptor: equ 0x13
trdos_command.copy_from_descriptor_to_hl: equ 0x14
trdos_command.test_track: equ 0x15
trdos_command.select_bottom_side: equ 0x16
trdos_command.select_top_side: equ 0x17
trdos_command.read_system_track: equ 0x18
; --------------------------------------------------------------
; TR-DOS error codes
trdos_error.no_errors equ 0
trdos_error.no_files equ 1
trdos_error.file_exists equ 2
trdos_error.no_space equ 3
trdos_error.directory_full equ 4
trdos_error.record_number_overflow equ 5
trdos_error.no_disk equ 6
trdos_error.disk_errors equ 7
trdos_error.syntax_errors equ 8
trdos_error.undefined_error equ 9
trdos_error.stream_already_opened equ 10
trdos_error.not_disk_file equ 11
trdos_error.stream_not_open equ 12