исправлен баг с клавой (выход за границы таблицы XLAT_T). добавлен ctrl+c для прерывания процесса.

This commit is contained in:
Anatoliy Belyanskiy 2024-03-31 03:32:06 +10:00
parent ff2f2b9941
commit 23fa77a8b9
14 changed files with 681 additions and 427 deletions

View File

@ -10,7 +10,7 @@
; 3 - ‚כ₪¥«¨גל ¨¬ן ה ©« 
; 4 - ‚כ₪¥«¨גל א בט¨א¥­¨¥ ה ©« 
; 5 - ‚כ₪¥«¨גל ¨¬ן ₪¨ב× , ¯דגל × ה ©«ד, ¨¬ן ה ©«  ¨ א בט. ה ©« 
; 6 - ‡ à¥§¥à¢¨à®¢ ­®
; 6 - ‡ à¥§¥à¢¨à®¢ ­® ;!TODO ¯à¥®¡à §®¢ âì ®â­®á¨â¥«ì­ë© ¯ãâì ¢ ¯®«­ë© ; [ ]
; 7 - ‚כ₪¥«¨גל ¯ א ¬¥גא ×®¬ ­₪­®© בגא®×¨
; 8 - <20>א¥®¡א §®¢ גל ¨§ 11 ב¨¬¢®«ל­®£® ה®א¬ ג  ¢ ה®א¬ ג „<>
; 9 - <20>א¥®¡א §®¢ גל ¨§ ה®א¬ ג  „<> ¢ 11 ב¨¬¢®«ל­כ© ה®א¬ ג

View File

@ -565,11 +565,13 @@ LEAVE: LD A,B
LD A,(ErrorLevel)
;R12
CP DSS_Error.sys.UNEXPECTED_APP_TRMN
JR NZ,.exit
SCF
JR Z,.error_exit
CP DSS_Error.sys.USER_ABORT
JR NZ,.norm_exit
.error_exit: SCF
JP (HL)
;
.exit: AND A
.norm_exit: AND A
JP (HL)
;/////////////////////////////////////////////////////////////////////

View File

@ -1,101 +1,101 @@
;
MACRO BUFFER_KEYINTER
_mInfoALIGN 256,0
;KEYBOARD BUFFER
SBUF: BLOCK 64,0
; MACRO BUFFER_KEYINTER
; _mInfoALIGN 256,0
; ;KEYBOARD BUFFER
; SBUF: BLOCK 64,0
HEAD DB #00
HOST DB #00
; HEAD DB #00
; HOST DB #00
K_LOCK EQU $-KEYFLAG
LANG_L EQU 7
PAUSE_L EQU 6
RES5_L EQU 5
RES4_L EQU 4
NUM_L EQU 3
SCRL_L EQU 2
INS_L EQU 1
CAPS_L EQU 0
KEYFLAG DB #02 ;D0-Key Pressed
; K_LOCK EQU $-KEYFLAG
; LANG_L EQU 7
; PAUSE_L EQU 6
; RES5_L EQU 5
; RES4_L EQU 4
; NUM_L EQU 3
; SCRL_L EQU 2
; INS_L EQU 1
; CAPS_L EQU 0
; KEYFLAG DB #02 ;D0-Key Pressed
K_SHIFT EQU $-KEYFLAG
L_SHIFT EQU 7
R_SHIFT EQU 6
X_CTRL EQU 5
X_ALT EQU 4
L_CTRL EQU 3
L_ALT EQU 2
R_CTRL EQU 1
R_ALT EQU 0
KEYCTRL DB #00
; K_SHIFT EQU $-KEYFLAG
; L_SHIFT EQU 7
; R_SHIFT EQU 6
; X_CTRL EQU 5
; X_ALT EQU 4
; L_CTRL EQU 3
; L_ALT EQU 2
; R_CTRL EQU 1
; R_ALT EQU 0
; KEYCTRL DB #00
KEYFLG EQU $-KEYFLAG
FLAG_E0 EQU 7
FLAG_F0 EQU 6
FLAG_E1 EQU 5
FLAG_04 EQU 4
FLAG_03 EQU 3
FLAG_02 EQU 2
FLAG_01 EQU 1
FLAG_00 EQU 0
DB #00
; KEYFLG EQU $-KEYFLAG
; FLAG_E0 EQU 7
; FLAG_F0 EQU 6
; FLAG_E1 EQU 5
; FLAG_04 EQU 4
; FLAG_03 EQU 3
; FLAG_02 EQU 2
; FLAG_01 EQU 1
; FLAG_00 EQU 0
; DB #00
SOUND_K EQU $-KEYFLAG
FLAG_S7 EQU 7
FLAG_S6 EQU 6
FLAG_S5 EQU 5
FLAG_S4 EQU 4
FLAG_S3 EQU 3
FLAG_S2 EQU 2
SF_ALT EQU 1
SF_BUFF EQU 0
DB #03
;
; D15 - LShift
; D14 - RShift
; D13 - CTRL
; D12 - ALT
; D11 - LCTRL
; D10 - LALT
; D9 - RCTRL
; D8 - RALT
; D7 - Language Lock
; D6 - Reserved
; D5 - Reserved
; D4 - Reserved
; D3 - Num Lock
; D2 - Scroll Lock
; D1 - Insert Lock
; D0 - Caps Lock
;
; D15 - Keystroke
; D14
; D13 \
; D12 \
; D11 -- Position code (0...5Ah)
; D10 /
; D9 /
; D8
; D7..D0 - ASCII code
;
ENDM
; SOUND_K EQU $-KEYFLAG
; FLAG_S7 EQU 7
; FLAG_S6 EQU 6
; FLAG_S5 EQU 5
; FLAG_S4 EQU 4
; FLAG_S3 EQU 3
; FLAG_S2 EQU 2
; SF_ALT EQU 1
; SF_BUFF EQU 0
; DB #03
; ;
; ; D15 - LShift
; ; D14 - RShift
; ; D13 - CTRL
; ; D12 - ALT
; ; D11 - LCTRL
; ; D10 - LALT
; ; D9 - RCTRL
; ; D8 - RALT
; ; D7 - Language Lock
; ; D6 - Reserved
; ; D5 - Reserved
; ; D4 - Reserved
; ; D3 - Num Lock
; ; D2 - Scroll Lock
; ; D1 - Insert Lock
; ; D0 - Caps Lock
; ;
; ; D15 - Keystroke
; ; D14
; ; D13 \
; ; D12 \
; ; D11 -- Position code (0...5Ah)
; ; D10 /
; ; D9 /
; ; D8
; ; D7..D0 - ASCII code
; ;
; ENDM
;
;
MACRO TABLE_XLAT_T
_mInfoALIGN 256,0
; 0 1 2 3 4 5 6 7 8 9 A B C D E F
XLAT_T: DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00
DB #00,#37,#29,#00,#36,#10,#02,#00,#00,#00,#2A,#1E,#1D,#11,#03,#00 ;10
DB #00,#2C,#2B,#1F,#12,#05,#04,#00,#00,#38,#2D,#20,#14,#13,#06,#00 ;20
DB #00,#2F,#2E,#22,#21,#15,#07,#00,#00,#00,#30,#23,#16,#08,#09,#00 ;30
DB #00,#31,#24,#17,#18,#0B,#0A,#00,#00,#32,#33,#25,#26,#19,#0C,#00 ;40
DB #00,#00,#27,#00,#1A,#0D,#00,#00,#1C,#34,#28,#1B,#00,#35,#00,#00 ;50
DB #00,#00,#00,#00,#00,#00,#0E,#00,#00,#51,#00,#54,#57,#00,#00,#00 ;60
DB #50,#4F,#52,#55,#56,#58,#01,#49,#45,#4D,#53,#4C,#4B,#59,#48,#00 ;70
DB #00,#00,#00,#41,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;80
ENDM
; MACRO TABLE_XLAT_T
; _mInfoALIGN 256,0
; ; 0 1 2 3 4 5 6 7 8 9 A B C D E F
; XLAT_T: DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00
; DB #00,#37,#29,#00,#36,#10,#02,#00,#00,#00,#2A,#1E,#1D,#11,#03,#00 ;10
; DB #00,#2C,#2B,#1F,#12,#05,#04,#00,#00,#38,#2D,#20,#14,#13,#06,#00 ;20
; DB #00,#2F,#2E,#22,#21,#15,#07,#00,#00,#00,#30,#23,#16,#08,#09,#00 ;30
; DB #00,#31,#24,#17,#18,#0B,#0A,#00,#00,#32,#33,#25,#26,#19,#0C,#00 ;40
; DB #00,#00,#27,#00,#1A,#0D,#00,#00,#1C,#34,#28,#1B,#00,#35,#00,#00 ;50
; DB #00,#00,#00,#00,#00,#00,#0E,#00,#00,#51,#00,#54,#57,#00,#00,#00 ;60
; DB #50,#4F,#52,#55,#56,#58,#01,#49,#45,#4D,#53,#4C,#4B,#59,#48,#00 ;70
; DB #00,#00,#00,#41,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;80
; ENDM
;
;

View File

@ -432,6 +432,7 @@ WRT_HND: SET_PAGE_X DIRPAGE
;----------------------------------------------------------------------;
; ‘¡à®á¨âì ª¥è ª â «®£  ­  ¤¨áª.
; ¢å®¤: iy=áâàãªâãà  ¤¥áªà¨¯â®à 
; [ ] fat32
SAVEDIR:
XOR A
LD HL,0
@ -529,12 +530,17 @@ RD_BPB: LD C,SLOT3
LD (FatBuffer.FAT1_SEC_L),HL ; low word first sector FAT #1
LD (FatBuffer.FAT2_SEC_L),HL ; low word first sector FAT #2
;[ ] fat32 ;!FIXIT
LD DE,0
XOR A
LD D,A
LD E,A
LD (FatBuffer.FAT1_SEC_H),DE ; high word first sector FAT #1
LD (FatBuffer.FAT2_SEC_H),DE ; high word first sector FAT #1
LD (FatBuffer.SectorsPerFAT_H),A
;
;
LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16)
LD (FatBuffer.SectorsPerFAT_L),DE
;
LD A,(CORE_BUFFERS.BootSector.Number_of_FATs) ; amount FATs
CP 1
JR Z,.loop1
@ -751,6 +757,8 @@ FatBuffer:
.FAT1_SEC_H: DW #0000 ; [ ] fat32
.FAT2_SEC_L: DW #0000
.FAT2_SEC_H: DW #0000 ; [ ] fat32
.SectorsPerFAT_L DW #0000
.SectorsPerFAT_H DB #00
.RootDirFirstSector_H: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ®£à ­¨ç¥­¨¥ ¢ 32 ƒ¨£  ;!FIXIT ­¥ ¨á¯®«ì§ã¥âáï
.RootDirFirstSector_L: DW #0000 ; MSD_CAT_SEC first sector DIR
.FilesPerSector: DB #00 ; ç¨á«® ä ©«®¢ëå § ¯¨á¥© ¢ ᥪâ®à¥

View File

@ -349,22 +349,39 @@ WRITE_TO_FAT: LD DE,(FatBuffer.ENDCLUS_LOW) ;
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
; in: HL - Cache block
; out: C:HL - logical number
; B = 0
; [x] fat32 ;!TEST
GET_SECTOR_OF_FAT:
XOR A
LD B,A
LD C,A
DUP FAT_CACHE.Degree ; 4
ADD HL,HL ;x2
ADC A,C
EDUP
LD C,A
LD A,(FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32
RET NZ
ADD HL,HL ;x2
RET NC
INC C
LD B,FAT_CACHE.Degree_32 ;!FIXIT ᤥ« âì ç¥à¥§ ¯¥à¥¬¥­­ãî
XOR FAT_TYPE.x32
JR Z,.next
LD B,FAT_CACHE.Degree ;!FIXIT ᤥ« âì ç¥à¥§ ¯¥à¥¬¥­­ãî
XOR A
.next: LD C,A
;
.loop: ADD HL,HL ;x2
ADC A,C
DJNZ .loop
;
LD C,A
RET
; GET_SECTOR_OF_FAT:
; XOR A
; LD B,A
; LD C,A
; DUP FAT_CACHE.Degree ; 4
; ADD HL,HL ;x2
; ADC A,C
; EDUP
; LD C,A
; LD A,(FatBuffer.FAT_TYPE)
; CP FAT_TYPE.x32
; RET NZ
; ADD HL,HL ;x2
; RET NC
; INC C
; RET
;;;;;;;;;
@ -385,23 +402,23 @@ READ_FAT_TABLE: PUSH HL
;
CALL GET_SECTOR_OF_FAT
;
; BC:HL - ­®¬¥à «®£.ᥪâ®à 
LD DE,(FatBuffer.FAT1_SEC_L)
; BC:HL - ­®¬¥à «®£. ᥪâ®à 
ADD HL,DE
EX DE,HL
LD XH,D
LD XL,E
LD HL,(FatBuffer.FAT1_SEC_H)
JR NC,.no_inc
INC HL
.no_inc: ADD HL,BC
; JR NC,.no_inc
; INC HL
.no_inc: ADC HL,BC
; HL:IX - SECTOR FAT FOR READING
LD A,(FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32
XOR FAT_TYPE.x32
LD BC,FAT_CACHE.Sectors_16 * 256 + Dss.DRV.Read ; ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
JR NZ,.nxt
JR NZ,.next
LD B,FAT_CACHE.Sectors_32 ; ॣ B * FAT_CACHE.Sector_Size = CASH SIZE
.nxt: LD DE,FATPAGE.cache ; ªã¤  ; DE - FAT ADDRESS
.next: LD DE,FATPAGE.cache ; ªã¤  ; DE - FAT ADDRESS
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
RST ToDSS.DRV
POP HL
@ -409,7 +426,7 @@ READ_FAT_TABLE: PUSH HL
; <20>®¤ª«îç¨âì ¡ ­ªã ª¥è  FAT ¨ § ¯¨á âì ¥£® ­  ¤¨áª
; [ ] fat32
; [x] fat32 ;!TEST
WRITE_FAT_TABLE:
SET_PAGE_X FATPAGE
PUSH AF
@ -421,70 +438,108 @@ WRITE_FAT_TABLE:
.Start: LD HL,(FatBuffer.CacheBlock)
;FAT_BLOCK * Sectors_in_Block = SECTOR_OF_FAT
CALL GET_SECTOR_OF_FAT
; BC:HL - ­®¬¥à «®£. ᥪâ®à 
; [ ] fat32 ;!FIXIT
LD B,H
LD C,L
; [ ] fat32
LD DE,FAT_CACHE.Sectors_16
ADD HL,DE ;+ SIZE CASH (16 SECTORS)
LD A,E ;!HARDCODE ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï ç⥭¨ï ¢ ªíè
LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16) ; ᥪâ®à®¢ ­  FAT
; B=0, C:HL - ᬥ饭¨¥ ¢ ᥪâ®à å ¢­ãâਠ⠡«¨æë FAT ­  ­ ç «® ¡«®ª 
; [x] fat32 ;!FIXIT
LD (.save_hl),HL
;LD B,H
;LD C,L
;
LD DE,FAT_CACHE.Sectors_32
LD A,(FatBuffer.FAT_TYPE)
CP FAT_TYPE.x32
JR Z,.next
LD DE,FAT_CACHE.Sectors_16 ; !FIXIT ¡à âì íâ® §­ ç¥­¨¥ ¨§ ¯¥à¥¬¥­­®© ¢¥§¤¥
;
.next: ADD HL,DE ;+ SIZE CASH (16 SECTORS)
JR NC,.no_inc
INC C
;
; C:HL ᬥ饭¨¥ ¢ ᥪâ®à å ¢­ãâਠ⠡«¨æë FAT ­  ª®­¥æ ¡«®ª 
;
.no_inc: ; ª®­¥æ ¡«®ª  ¢ë室¨â §  ¯à¥¤¥«ë â ¡«¨æë?
LD B,E ; MAX ç¨á«® ᥪâ®à®¢ ¤«ï ç⥭¨ï ¢ ªíè
LD A,(FatBuffer.SectorsPerFAT_H)
LD (.sub_A),A
;LD DE,(CORE_BUFFERS.BootSector.SectorsPerFAT16) ; ᥪâ®à®¢ ­  FAT
LD DE,(FatBuffer.SectorsPerFAT_L)
AND A
LD A,C
SBC HL,DE
JR C,.WALLFAT
.sub_A+1: SBC A,0
JR C,.WALLFAT ; F=1: ­¥ ¢ë室¨â
OR A
JR NZ,.ERR
;
EX DE,HL
LD HL,FAT_CACHE.Sectors_16
; DE - ­  ᪮«ìª® ᥪâ®à®¢ ª®­¥æ ¡«®ª  ¢ë室¨â §  ¯à¥¤¥«ë â ¡«¨æë.
LD HL,FAT_CACHE.Sectors_16 ; !FIXIT ¡à âì íâ® §­ ç¥­¨¥ ¨§ ¯¥à¥¬¥­­®© ¢¥§¤¥
; CF = 0
SBC HL,DE
;SBC A,0
JR C,.ERR ;!TODO ¯à®¢¥à¨âì
LD A,L
.WALLFAT:
LD H,B
LD L,C
PUSH HL
LD B,L ; ç¨á«® ᥪâ®à®¢ ¤«ï ç⥭¨ï ¢ ªíè
.WALLFAT: ;
.save_hl+1: LD HL,0
;LD H,B
;LD L,C
;PUSH HL
;
; B = ç¨á«® ᥪâ®à®¢
LD IX,(FatBuffer.FAT1_SEC_H)
LD DE,(FatBuffer.FAT1_SEC_L)
LD B,A ; ç¨á«® ᥪâ®à®¢
LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢
;LD B,A
;LD C,Dss.DRV.Write ; § ¯¨áì ᥪâ®à®¢
PUSH BC
; á®å࠭塞 ¯¥à¢ãî ª®¯¨î FAT
;
; á®å࠭塞 ¯¥à¢ãî ª®¯¨î FAT. ‚室 IX:DE - ­ ç «® â ¡«¨æë FAT
; C:HL - ᬥ饭¨¥ ¢­ãâਠ⠡«¨æë
; B - ª®«¨ç¥á⢮ ᥪâ®à®¢
CALL .SAVE_FAT_XX
; [ ] ¥á«¨ ¢á¥£® ®¤­  â ¡«¨æ  FAT, â® ¯®¢â®à­®© § ¯¨á¨ ­¥ ¯à®¨á室¨â 13/03/2024
LD DE,(FatBuffer.FAT2_SEC_L)
LD HL,(FatBuffer.FAT1_SEC_L)
; [x] ¥á«¨ ¢á¥£® ®¤­  â ¡«¨æ  FAT, â® ¯®¢â®à­®© § ¯¨á¨ ­¥ ¯à®¨á室¨â 13/03/2024
POP BC ; B = ç¨á«® ᥪâ®à®¢, C = áâ à訩 ¡ ©â ᬥ饭¨ï ¢ ᥪâ®à å
LD HL,(FatBuffer.FAT1_SEC_H)
LD DE,(FatBuffer.FAT2_SEC_H)
AND A
SBC HL,DE
POP BC ; b=ç¨á«® ᥪâ®à®¢
POP HL
JR NZ,.not_one_FAT
LD HL,(FatBuffer.FAT2_SEC_L)
LD DE,(FatBuffer.FAT1_SEC_L)
; CF = 0
SBC HL,DE
JR Z,.only_one_FAT
;
; á®å࠭塞 ¢â®àãî ª®¯¨î FAT
.not_one_FAT: LD IX,(FatBuffer.FAT2_SEC_H)
LD DE,(FatBuffer.FAT2_SEC_L)
LD HL,(.save_hl)
CALL .SAVE_FAT_XX
AND A ;!TODO ­¥â ª®­âà®«ï ®è¨¡®ª
.only_one_FAT:
.only_one_FAT: ;
.ERR: LD A,0
LD (FatBuffer.CacheUpdated),A
RET
;
.SAVE_FAT_XX:
ADD HL,DE
EX DE,HL
; ‚室: IX:DE - ­ ç «® â ¡«¨æë FAT ¢ ᥪâ®à å
; C:HL - ᬥ饭¨¥ ¢ â ¡«¨æ¥ ¢ ᥪâ®à å
; B - ª®«¨ç¥á⢮ ᥪâ®à®¢
.SAVE_FAT_XX: ADD HL,DE
;EX DE,HL
JR NC,.no_inc_C
INC C
; ­®¬¥à «®£. ᥪâ®à 
;LD IX,0
;ADD IX,DE
.no_inc_C: LD D,0
LD E,C
ADD IX,DE
LD D,XH
LD E,XL
EX DE,HL
; LD H,0
; LD L,C
LD XH,D
LD XL,E
;
LD HL,0 ; áâ. à §àï¤
; CF = ADD HL,DE
; [ ] fat32 - ¢â®à ï â ¡«¨æ  ä â ¬®¦¥â ¦¥ ã¥å âì ¤ «ìè¥ 16-¡¨â «®£¨ç¥áª®£® ᥪâ®à ?
IF _FAT32_ENABLE
RL L
ENDIF
;HL:IX - SECTOR OF FAT FOR SAVE
; HL:IX - ᬥ饭¨¥ ¢­ãâਠࠧ¤¥«  ­  ­ ç «® ­ã¦­®£® ¡«®ª  FAT
LD DE,FATPAGE.cache ; ®âªã¤ 
LD A,(FatBuffer.DRIVE) ; ­®¬¥à ¤¨áª 
LD C,Dss.DRV.Write
JP ToDSS.DRV
;-----------------------------------------------------------------------
@ -590,7 +645,7 @@ GET_FAT12_CELL:
AND #07
;AND FAT_CACHE.Part_Mask_16
;
; [ ] fat32 ¯®¬¥­ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ­ìè¥ ­®¬¥à ¡«®ª  ¢ ॣ. A ¯¥à¥¤ ¢ «áï
; [ ] ¯®¬¥­ï«áï ¢å®¤ ¢ ¯à®æ¥¤ãàã READ_FAT_TABLE. <20> ­ìè¥ ­®¬¥à ¡«®ª  ¢ ॣ. A ¯¥à¥¤ ¢ «áï
; LD BC,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
; CP C
LD DE,(FatBuffer.CacheBlock) ; BC - BLOCK FAT IN CASH
@ -611,7 +666,7 @@ GET_FAT12_CELL:
;NSECTOR:
; in: HL':HL - CLUSTER
; out: HL:IX - SECTOR
;[ ] fat32
;[x] fat32 ;!TEST
CLUSTER_TO_SECTOR:
EXX
PUSH HL
@ -747,6 +802,7 @@ BLOCK_READ: PUSH BC
LD C,Dss.DRV.Read
RST ToDSS.DRV
JR C,.Error
; [ ] fat32 ???
POP BC
LD HL,(READ.PointerOnBuffer)
LD DE,(CORE_BUFFERS.BootSector.BytesPerSector)
@ -952,6 +1008,7 @@ BLOK_WR: PUSH BC
LD B,C
LD C,Dss.DRV.Write
RST ToDSS.DRV
LD A,DSS_Error.sys.WRITE_ERROR
JR C,.ErrorWrite
POP BC
LD HL,(READ.PointerOnBuffer)
@ -999,6 +1056,7 @@ BLOK_WR: PUSH BC
LD B,C
LD C,Dss.DRV.Write
RST ToDSS.DRV
LD A,DSS_Error.sys.WRITE_ERROR
JR C,.ErrorWrite
POP BC
LD HL,(READ.PointerOnBuffer)
@ -1013,11 +1071,11 @@ BLOK_WR: PUSH BC
;
.Error_6: POP BC
POP BC
.Error_4: POP BC
POP BC
POP BC ;[x] GET/SAVE CLUSTER NUMBER BEFORE/AFTER READ/WRITE
.ErrorWrite: POP BC
POP DE
LD A,DSS_Error.sys.WRITE_ERROR
;LD A,DSS_Error.sys.WRITE_ERROR
;SCF
RET
;
@ -1084,6 +1142,7 @@ BLOK_WR: PUSH BC
; DE - ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (áâ à襥 á«®¢®, D=D+1)
; BC - ®á⠢襥áï ᬥ饭¨¥ ¢ ä ©«¥ ¢ ª« áâ¥à å (¬« ¤è¥¥ á«®¢®, B=B+1)
; ­¥ ¯®àâ¨â HL, HL' ¨ DE:BC ¥á«¨ ®¯â¨¬¨§ æ¨ï ­¥ áà ¡®â « 
;[ ] fat32
GetSavedCluster:
XOR A
CP (IY+_sFM.OptimizedClusters)

View File

@ -1,31 +1,49 @@
;[BEGIN]
;//MODULE: KEYINTER
;//MODULE: KEYINTER Keyboard Scan Codes: Set 2
;//CREATE: 19-05-1998 AUTHOR: Denis Parinov
;//UPDATE: 24-10-1999 DNS Restore module
;------------------------------------------------
;R02 13-04-2023 BAO FIX BUG IN K_CLEAR WITH STACK OVERFLOW
;R01 10-02-2003 DNS Add cursor visualisation
;
_mInfoALIGN 256,0
;KEYBOARD BUFFER
SBUF: BLOCK 64,0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;KEYBOARD BUFFER
_mInfoALIGN 256,0
SBUF: BLOCK 64,0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; _mInfoALIGN 256,0 ;;
; 0 1 2 3 4 5 6 7 8 9 A B C D E F ;;
XLAT_T: DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00 ;;
DB #00,#37,#29,#00,#36,#10,#02,#00,#00,#00,#2A,#1E,#1D,#11,#03,#00 ;10 ;;
DB #00,#2C,#2B,#1F,#12,#05,#04,#00,#00,#38,#2D,#20,#14,#13,#06,#00 ;20 ;;
DB #00,#2F,#2E,#22,#21,#15,#07,#00,#00,#00,#30,#23,#16,#08,#09,#00 ;30 ;;
DB #00,#31,#24,#17,#18,#0B,#0A,#00,#00,#32,#33,#25,#26,#19,#0C,#00 ;40 ;;
DB #00,#00,#27,#00,#1A,#0D,#00,#00,#1C,#34,#28,#1B,#00,#35,#00,#00 ;50 ;;
DB #00,#00,#00,#00,#00,#00,#0E,#00,#00,#51,#00,#54,#57,#00,#00,#00 ;60 ;;
DB #50,#4F,#52,#55,#56,#58,#01,#49,#45,#4D,#53,#4C,#4B,#59,#48,#00 ;70 ;;
DB #00,#00,#00,#41,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;80 ;;
.Size EQU $-XLAT_T ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HEAD DB #00
HOST DB #00
;
K_LOCK EQU $-KEYFLAG
LANG_L EQU 7
PAUSE_L EQU 6
LANG_R EQU 5 ; á®ç¥â ­¨¥ ª« ¢¨è ¤«ï ¯¥à¥ª«î祭¨ï ï§ëª  ®â¦ â®
LANG_S EQU 4 ; á®ç¥â ­¨¥ ª« ¢¨è ¤«ï ¯¥à¥ª«î祭¨ï ï§ëª  ­ ¦ â®
RES5_L EQU 5 ; not used ;X_SHIFT
RES4_L EQU 4 ; not used
NUM_L EQU 3
SCRL_L EQU 2
INS_L EQU 1
CAPS_L EQU 0
KEYFLAG DB #02 ;D0-Key Pressed
;
K_SHIFT EQU $-KEYFLAG
L_SHIFT EQU 7
R_SHIFT EQU 6
@ -36,7 +54,7 @@ L_ALT EQU 2
R_CTRL EQU 1
R_ALT EQU 0
KEYCTRL DB #00
;
KEYFLG EQU $-KEYFLAG
FLAG_E0 EQU 7
FLAG_F0 EQU 6
@ -45,9 +63,9 @@ FLAG_04 EQU 4
FLAG_03 EQU 3
FLAG_02 EQU 2
FLAG_01 EQU 1
FLAG_00 EQU 0
DB #00
CTRL_SHIFT EQU 0 ; ctrl+shift = change language
KEY_FLG DB #00
;
SOUND_K EQU $-KEYFLAG
FLAG_S7 EQU 7
FLAG_S6 EQU 6
@ -58,6 +76,8 @@ FLAG_S2 EQU 2
SF_ALT EQU 1
SF_BUFF EQU 0
DB #03
;
UnCODE EQU $-KEYFLAG
UNCODE DW 0 ; ¯®á«¥¤­ïï ®â¦ â ï ª« ¢¨è 
; D15 - LShift
@ -69,7 +89,7 @@ UNCODE DW 0 ;
; D9 - RCTRL
; D8 - RALT
; D7 - Language Lock
; D6 - Reserved
; D6 - Pause Lock
; D5 - Reserved
; D4 - Reserved
; D3 - Num Lock
@ -201,19 +221,18 @@ Cursor_On: LD C,BIOS.LP_GET_PLACE ; 㧭
LD BC,NORM_ZG*256+BIOS.WIN_PUT_SYM ; b=§­ ª®£¥­., á=ᨬ¢®« ­  íªà ­
LD A,(Cursor.Flag)
OR A
JR Z,.put
LD B,CURSOR_ZG ; ç¥àâ 
LD A,(KEYFLAG) ; ä« £¨ ª« ¢ë
;BIT 1,A ; ¡¨â Ins
AND %0000'0010 ; ¡¨â Ins
JR NZ,.put
JR Z,.put_
LD B,INS_CUR_ZG ; ¡«®ª
LD A,(KEYFLAG) ; ä« £¨ ª« ¢ë
AND 1<<INS_L
JR Z,.put_
LD B,CURSOR_ZG ; ç¥àâ 
.put: XOR A ; ­®¬¥à ®ª­ 
RST ToBIOS
.put_: RST ToBIOS
;
LD DE,(Cursor_Off.pos)
CALL LOCATE
;
LD A,1
LD (Cursor_Off.Flag),A
LD A,delay_curs
@ -317,7 +336,7 @@ TESTKEY:
CP (HL)
RET Z
LD L,(HL)
LD H,SBUF/256
LD H,high SBUF
LD E,(HL)
INC L
LD D,(HL)
@ -379,7 +398,7 @@ PUTSYM: LD HL,HEAD
INC (HL)
RES 6,(HL)
LD L,A
LD H,SBUF/256
LD H,high SBUF
LD (HL),E
INC L
LD (HL),D
@ -400,7 +419,7 @@ GETSYM: LD HL,HOST
INC (HL)
RES 6,(HL)
LD L,A
LD H,SBUF/256
LD H,high SBUF
LD E,(HL)
INC L
LD D,(HL)
@ -411,8 +430,7 @@ GETSYM: LD HL,HOST
RET
;
FULL_BF:
EX AF,AF'
FULL_BF: EX AF,AF'
BIT SF_BUFF,(IX+SOUND_K)
JR Z,.FBF
EXX
@ -422,15 +440,17 @@ FULL_BF:
EXX
.FBF: EX AF,AF'
RET
.E0_KEY:
SET FLAG_E0,(IX+KEYFLG)
;
.E0_KEY: SET FLAG_E0,(IX+KEYFLG)
JR KEYSCAN.RESCAN
.F0_KEY:
SET FLAG_F0,(IX+KEYFLG)
;
.F0_KEY: SET FLAG_F0,(IX+KEYFLG)
JR KEYSCAN.RESCAN
.E1_KEY:
SET FLAG_E1,(IX+KEYFLG)
;
IF USE_E1_SCANCODE
.E1_KEY: SET FLAG_E1,(IX+KEYFLG)
JR KEYSCAN.RESCAN
ENDIF
;
KEYSCAN: LD IX,KEYFLAG
@ -458,9 +478,12 @@ KEYSCAN: LD IX,KEYFLAG
;
CP #E0
JR Z,FULL_BF.E0_KEY
;
CP #E1
IF USE_E1_SCANCODE
JR Z,FULL_BF.E1_KEY
ELSE
JR Z,.RESCAN
ENDIF
;
BIT FLAG_F0,(IX+KEYFLG)
JR NZ,UN_KEY
@ -469,12 +492,27 @@ KEYSCAN: LD IX,KEYFLAG
CALL XLAT
CALL SHIFTS
RES FLAG_E0,(IX+KEYFLG)
IF USE_E1_SCANCODE
RES FLAG_E1,(IX+KEYFLG)
;[ ] ¢ë£à¥¡á⨠¢¥áì ¡ãä¥à
JR Z,.RESCAN
; RET Z ;IT'S SHIFT KEY
ENDIF
;
CALL INPCODE ;L - AT POS. CODE
IF CHANGE_LANG_CTRL_SHIFT
JR NZ,.check_key
; check ctrl+shift
BIT X_CTRL,(IX+K_SHIFT)
JR Z,.RESCAN ;[x] ¢ë£à¥¡á⨠¢¥áì ¡ãä¥à
LD A,(KEYCTRL)
AND 1<<L_SHIFT | 1<<R_SHIFT
JR Z,.RESCAN ;[x] ¢ë£à¥¡á⨠¢¥áì ¡ãä¥à
SET CTRL_SHIFT,(IX+KEYFLG)
JR .RESCAN ;[x] ¢ë£à¥¡á⨠¢¥áì ¡ãä¥à
ELSE
;[x] ¢ë£à¥¡á⨠¢¥áì ¡ãä¥à
JR Z,.RESCAN ;IT'S SHIFT KEY
;
ENDIF
;
.check_key: CALL INPCODE ;L - AT POS. CODE
;PUTCODE
;Caps Lock
LD HL,#1C00
@ -515,37 +553,44 @@ KEYSCAN: LD IX,KEYFLAG
; SBC HL,DE
; CALL Z,RST_X
;
; [x] ®¯ á­ ï å७ì
LD HL,BREAK_PROCESS_CODE
AND A
SBC HL,DE
CALL Z,Break_Process
;
LD BC,(KEYFLAG)
CALL PUTSYM
;[ ] 29/02/2024 ¢ë£à¥¡á⨠¢¥áì ¡ãä¥à
JR .RESCAN
JP .RESCAN
;RET
;
;
IF CHANGE_LANG_CTRL_SHIFT
UN_KEY: RES FLAG_F0,(IX+KEYFLG)
LD L,A
CALL XLAT
CALL UNSHIFT
RES FLAG_E0,(IX+KEYFLG)
LD A,(UNCODE)
LD H,0
LD (UNCODE),HL
CP #36 ;L CTRL
JR Z,.check_shift
CP #29 ;L SHIFT
RET NZ
; check ctrl
LD A,L
SUB #36 ;L CTRL
JR Z,LANG_X
RET
;
.check_shift: LD A,L
SUB #29
JR Z,LANG_X
RET
ELSE
; IF CHANGE_LANG_CTRL_SHIFT
; UN_KEY: RES FLAG_F0,(IX+KEYFLG)
; LD L,A
; CALL XLAT
; CALL UNSHIFT
; RES FLAG_E0,(IX+KEYFLG)
; LD A,(UNCODE)
; LD H,0
; LD (UNCODE),HL
; ;
; CP #36 ;L CTRL
; JR Z,.check_shift
; CP #29 ;L SHIFT
; RET NZ
; ; check ctrl
; LD A,L
; SUB #36 ;L CTRL
; JR Z,LANG_X
; RET
; ;
; .check_shift: LD A,L
; SUB #29
; JR Z,LANG_X
; RET
; ELSE
UN_KEY: RES FLAG_F0,(IX+KEYFLG)
LD L,A
CALL XLAT
@ -554,22 +599,24 @@ UN_KEY: RES FLAG_F0,(IX+KEYFLG)
LD H,0
LD (UNCODE),HL
RET
ENDIF
; ENDIF
;
CAPS_X: LD A,(IX+K_LOCK)
CAPS_X: LD A,(KEYFLAG)
XOR 1<<CAPS_L
LD (IX+K_LOCK),A
LD (KEYFLAG),A
RET
;
LANG_X: IFN CHANGE_LANG_CTRL_SHIFT
BIT X_CTRL,(IX+K_SHIFT)
RET Z
ELSE
RES CTRL_SHIFT,(IX+KEYFLG)
ENDIF
LD A,(IX+K_LOCK)
LD A,(KEYFLAG)
XOR 1<<LANG_L
LD (IX+K_LOCK),A
LD (KEYFLAG),A
BIT SF_ALT,(IX+SOUND_K)
RET Z
EXX
@ -580,25 +627,25 @@ LANG_X: IFN CHANGE_LANG_CTRL_SHIFT
RET
;
INS_X: LD A,(IX+K_LOCK)
INS_X: LD A,(KEYFLAG)
XOR 1<<INS_L
LD (IX+K_LOCK),A
LD (KEYFLAG),A
RET
;
NUM_X: LD A,(IX+K_LOCK)
NUM_X: LD A,(KEYFLAG)
XOR 1<<NUM_L
LD (IX+K_LOCK),A
LD (KEYFLAG),A
RET
;
PAUSE_X: BIT X_CTRL,(IX+K_SHIFT)
RET Z
POP HL ; ¡ « ­á á⥪ 
LD A,(IX+K_LOCK)
LD A,(KEYFLAG)
XOR 1<<PAUSE_L
LD (IX+K_LOCK),A
BIT PAUSE_L,A
LD (KEYFLAG),A
AND 1<<PAUSE_L
RET Z
EI
.loop: HALT
@ -608,9 +655,9 @@ PAUSE_X: BIT X_CTRL,(IX+K_SHIFT)
RET
;
SCL_X: LD A,(IX+K_LOCK)
SCL_X: LD A,(KEYFLAG)
XOR 1<<SCRL_L
LD (IX+K_LOCK),A
LD (KEYFLAG),A
RET
;
@ -645,6 +692,9 @@ UNSHIFT: LD A,L
.USH2: CP #36 ;L CTRL
JR NZ,.USH3
RES L_CTRL,(IX+K_SHIFT)
IF CHANGE_LANG_CTRL_SHIFT
CALL .CHECK_CTRL_SHIFT
ENDIF
BIT R_CTRL,(IX+K_SHIFT)
RET NZ
RES X_CTRL,(IX+K_SHIFT)
@ -653,6 +703,9 @@ UNSHIFT: LD A,L
.USH3: CP #3A ;R CTRL
JR NZ,.USH4
RES R_CTRL,(IX+K_SHIFT)
IF CHANGE_LANG_CTRL_SHIFT
CALL .CHECK_CTRL_SHIFT
ENDIF
BIT L_CTRL,(IX+K_SHIFT)
RET NZ
RES X_CTRL,(IX+K_SHIFT)
@ -661,13 +714,24 @@ UNSHIFT: LD A,L
.USH4: CP #29 ;L SHIFT
JR NZ,.USH5
RES L_SHIFT,(IX+K_SHIFT)
IF CHANGE_LANG_CTRL_SHIFT
JR .CHECK_CTRL_SHIFT
ELSE
RET
ENDIF
;
.USH5: CP #34 ;R SHIFT
;JR NZ,.USH6
RET NZ
RES R_SHIFT,(IX+K_SHIFT)
IFN CHANGE_LANG_CTRL_SHIFT
.USH6: RET
ELSE
.CHECK_CTRL_SHIFT:
BIT CTRL_SHIFT,(IX+KEYFLG)
RET Z
JP LANG_X
ENDIF
SHIFTS: LD A,L
CP #37 ;L ALT
@ -697,6 +761,9 @@ SHIFTS: LD A,L
.NSH4: CP #29 ;L SHIFT
JR NZ,.NSH5
SET L_SHIFT,(IX+K_SHIFT)
; BIT X_CTRL,(IX+K_SHIFT)
; RET Z
; SET
RET
;
.NSH5: CP #34 ;R SHIFT
@ -724,8 +791,19 @@ XLAT: BIT FLAG_E0,(IX+KEYFLG)
LD L,#47
RET Z
LD L,A
.W_O_E0: LD H,high XLAT_T
LD L,(HL)
.W_O_E0: ;LD H,high XLAT_T
;LD L,(HL)
; [ ] 31/03/2024 ¨á¯à ¢«¥­ ¡ £ á ¢ë室®¬ §  £à ­¨æë â ¡«¨æë XLAT_T
CP XLAT_T.Size
LD L,0
RET NC
;
LD HL,XLAT_T
ADD A,L
LD L,A
JR NC,.no_inc
INC H
.no_inc: LD L,(HL)
RET
;
@ -735,9 +813,10 @@ INPCODE: LD D,L
LD E,0
BIT LANG_L,(IX+K_LOCK)
JP NZ,RUSCODE
LD A,(IX+K_SHIFT)
AND #C0
JR NZ,SHIFT_L
LD A,(KEYCTRL)
AND 1<<L_SHIFT | 1<<R_SHIFT
;BIT X_SHIFT,(IX+K_LOCK)
JR NZ,.SHIFT
SET 7,D
BIT X_ALT,(IX+K_SHIFT)
RET NZ
@ -746,29 +825,25 @@ INPCODE: LD D,L
LD D,L
BIT CAPS_L,(IX+K_LOCK)
LD BC,CAPSTAB
JR NZ,CONVER.NO_SET
JR NZ,CONVERT.NO_SET
LD BC,NORMTAB
JR CONVER.NO_SET
JR CONVERT.NO_SET
;
; CONVER: LD H,0
; ADD HL,BC
; LD E,(HL)
; RET
SHIFT_L: LD BC,SHIFTAB
.SHIFT: LD BC,SHIFTAB
BIT CAPS_L,(IX+K_LOCK)
JR Z,CONVER.SET
JR Z,CONVERT.SET
LD BC,SHF2TAB
CONVER: ;
CONVERT: ;
.SET: SET 7,D
.NO_SET: LD H,0
ADD HL,BC
LD E,(HL)
RET
RUSCODE: LD A,(IX+K_SHIFT)
AND #C0
JR NZ,SHIFT_R
RUSCODE: LD A,(KEYCTRL)
AND 1<<L_SHIFT | 1<<R_SHIFT
;BIT X_SHIFT,(IX+K_LOCK)
JR NZ,.SHIFT
SET 7,D
BIT X_ALT,(IX+K_SHIFT)
RET NZ
@ -777,62 +852,21 @@ RUSCODE: LD A,(IX+K_SHIFT)
LD D,L
BIT CAPS_L,(IX+K_LOCK)
LD BC,CAPSRUS
JR NZ,CONVER.NO_SET
JR NZ,CONVERT.NO_SET
LD BC,NORMRUS
JR CONVER.NO_SET
; LD H,0
; ADD HL,BC
; LD E,(HL)
; RET
SHIFT_R: LD BC,SHIFRUS
JR CONVERT.NO_SET
;
.SHIFT: LD BC,SHIFRUS
BIT CAPS_L,(IX+K_LOCK)
JR Z,CONVER.SET
JR Z,CONVERT.SET
LD BC,SHF2RUS
JR CONVER.SET
; .CONVER: SET 7,D
; LD H,0
; ADD HL,BC
; LD E,(HL)
; RET
JR CONVERT.SET
;-----------------------------------------------------------------------
;!TEST
K_SETUP: INC B
DEC B
JP Z,KEYMAP
DEC B
JP Z,K_SND_R
DEC B
JP Z,K_SND_W
LD A,DSS_Error.sys.INVALID_ACCESS
SCF
RET
;
K_SND_R: LD A,(SOUND_K)
AND A
RET
;
K_SND_W: LD (SOUND_K),A
AND A
RET
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_mInfoALIGN 256,0 ;;
; 0 1 2 3 4 5 6 7 8 9 A B C D E F ;;
XLAT_T: DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00 ;;
DB #00,#37,#29,#00,#36,#10,#02,#00,#00,#00,#2A,#1E,#1D,#11,#03,#00 ;10 ;;
DB #00,#2C,#2B,#1F,#12,#05,#04,#00,#00,#38,#2D,#20,#14,#13,#06,#00 ;20 ;;
DB #00,#2F,#2E,#22,#21,#15,#07,#00,#00,#00,#30,#23,#16,#08,#09,#00 ;30 ;;
DB #00,#31,#24,#17,#18,#0B,#0A,#00,#00,#32,#33,#25,#26,#19,#0C,#00 ;40 ;;
DB #00,#00,#27,#00,#1A,#0D,#00,#00,#1C,#34,#28,#1B,#00,#35,#00,#00 ;50 ;;
DB #00,#00,#00,#00,#00,#00,#0E,#00,#00,#51,#00,#54,#57,#00,#00,#00 ;60 ;;
DB #50,#4F,#52,#55,#56,#58,#01,#49,#45,#4D,#53,#4C,#4B,#59,#48,#00 ;70 ;;
DB #00,#00,#00,#41,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;80 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DJNZ K_SND_R
; subfunc 0
KEYMAP: LD BC,ENDNORM-NORMTAB
BIT 7,A
JR NZ,READMAP
@ -862,14 +896,14 @@ KEYMAP: LD BC,ENDNORM-NORMTAB
DEC A
JR Z,.LTAB
;
XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND ?
XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND?
SCF
RET
;
.LTAB: LDIR
XOR A
RET
;
READMAP: RES 7,A
LD DE,NORMTAB
OR A
@ -895,7 +929,7 @@ READMAP: RES 7,A
LD DE,SHF2RUS
DEC A
JR Z,.RTAB
XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND ?
XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND?
SCF
RET
;
@ -903,7 +937,149 @@ READMAP: RES 7,A
LDIR
XOR A
RET
;
;
; DEC B
; JP Z,KEYMAP
; DEC B
; JP Z,K_SND_R
; DEC B
; JP Z,K_SND_W
; error subfunc
K_SETUP.ERROR: LD A,DSS_Error.sys.INVALID_ACCESS
SCF
RET
;
K_SND_R: DJNZ K_SND_W
; subfunc 1
LD A,(SOUND_K)
AND A
RET
; subfunc 2
K_SND_W: DJNZ K_RESET_BUFFER
;
LD (SOUND_K),A
AND A
RET
;
; ;. [ ] 31/03/2024 subfunc 3 ­ã¦­  «¨?
; K_RESET_BUFFER: DJNZ K_SETUP.ERROR
; LD A,R
; PUSH AF
; EI
; ;
; .Clear_loop: ; empty the buffer
; HALT
; IN A,(Z84.SIO.Ch_A.Data)
; IN A,(Z84.SIO.Ch_A.Ctrl)
; RRCA
; JR C,.Clear_loop
; ;
; DI
; POP AF
; JP PO,KBD_Receiver_Overrun.reset_errors
; EI
; JP KBD_Receiver_Overrun.reset_errors
;;;;;;;;;;;;;;;;
;;;;;;;;
; K_SETUP: INC B
; DEC B
; JP Z,KEYMAP
; DEC B
; JP Z,K_SND_R
; DEC B
; JP Z,K_SND_W
; LD A,DSS_Error.sys.INVALID_ACCESS
; SCF
; RET
; ;
; K_SND_R: LD A,(SOUND_K)
; AND A
; RET
; ;
; K_SND_W: LD (SOUND_K),A
; AND A
; RET
; ;
; KEYMAP: LD BC,ENDNORM-NORMTAB
; BIT 7,A
; JR NZ,READMAP
; ;
; LD DE,NORMTAB
; OR A
; JR Z,.LTAB
; LD DE,SHIFTAB
; DEC A
; JR Z,.LTAB
; LD DE,CAPSTAB
; DEC A
; JR Z,.LTAB
; LD DE,SHF2TAB
; DEC A
; JR Z,.LTAB
; LD DE,NORMRUS
; DEC A
; JR Z,.LTAB
; LD DE,SHIFRUS
; DEC A
; JR Z,.LTAB
; LD DE,CAPSRUS
; DEC A
; JR Z,.LTAB
; LD DE,SHF2RUS
; DEC A
; JR Z,.LTAB
; ;
; XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND ?
; SCF
; RET
; ;
; .LTAB: LDIR
; XOR A
; RET
; READMAP: RES 7,A
; LD DE,NORMTAB
; OR A
; JR Z,.RTAB
; LD DE,SHIFTAB
; DEC A
; JR Z,.RTAB
; LD DE,CAPSTAB
; DEC A
; JR Z,.RTAB
; LD DE,SHF2TAB
; DEC A
; JR Z,.RTAB
; LD DE,NORMRUS
; DEC A
; JR Z,.RTAB
; LD DE,SHIFRUS
; DEC A
; JR Z,.RTAB
; LD DE,CAPSRUS
; DEC A
; JR Z,.RTAB
; LD DE,SHF2RUS
; DEC A
; JR Z,.RTAB
; XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND ?
; SCF
; RET
; ;
; .RTAB: EX DE,HL
; LDIR
; XOR A
; RET
; ;
;-----------------------------------------------------------------------
BEEP: LD A,#10
OUT (ZX_Beeper),A
@ -969,7 +1145,7 @@ KBD_Receiver_Overrun:
RRCA
JR C,KBD_Receiver_Overrun
; reg 0 - error reset
LD A,%0011'0000
.reset_errors: LD A,%0011'0000
OUT (Z84.SIO.Ch_A.Ctrl),A
;!TEST SIO INT
; reg 0 - return from int
@ -980,11 +1156,17 @@ KBD_Receiver_Overrun:
;
;!TODO ¯à¨ ¤¥â¥ªâ¥ ¯¥à¥¯®«­¥­¨ï ¡ãä¥à  ¯à®æ  á­ïâì ª« ¢¨è¨ ¨§ ¯®àâ  #FE ᯥªâà㬠
;
LD (IX+K_SHIFT),0
LD (IX+KEYFLG),0
;
;AND A
XOR A
LD (KEYCTRL),A
LD (KEY_FLG),A
;LD (UNCODE),A
RET
; [x] ®¯ á­ ï å७ì
Break_Process: LD A,(TASK)
XOR 2 ; 2 - task of primary shell
RET Z
LD B,DSS_Error.sys.USER_ABORT
JP LEAVE
; `
; 0

View File

@ -186,9 +186,9 @@ HDDRIVE INC C
DEC C
JP Z,GBPB_H ; c=4 get BPB
DEC C
JP Z,READH ; c=5 input (誺平言 嵽芬桌恥)
JP Z,READH ; c=5 read (誺平言 嵽芬桌恥)
DEC C
JP Z,WRITEH ; c=6 output (<28>祠摐 嵽芬桌恥)
JP Z,WRITEH ; c=6 write (<28>祠摐 嵽芬桌恥)
DEC C
JP Z,REMOV_H ; c=7 Removable
DEC C

View File

@ -1 +1 @@
956
953

View File

@ -11,13 +11,17 @@
DEFINE COMPILE_UNUSED_CODE 0
;
;
; MOUSE
DEFINE MOUSE_COM_BAUD 0 ; 1 - 2485, 2 - 4807, else - 1215 (default)
DEFINE MOUSE_INT_ENABLED 0 ; INT from SIO ch. B
;DEFINE MOUSE_READ_PORT_TIMEOUT 3072 ; Š®áâë«ì­ë© â ©¬- ãâ ­  ®¦¨¤ ­¨¥ ¡ ©â  ®â ¬ë誨. <EFBFBD>à®áâ® ¥áâì ªà¨¢ë¥ ¯¥à¥å®¤­¨ª¨
;
; KEYBOARD
DEFINE KEYBOARD_INT_ENABLED 0 ; INT from SIO ch. A
DEFINE CHANGE_LANG_CTRL_SHIFT 1 ; [x] 0: Ctrl + Space, 1: Ctrl + Shift.
DEFINE BREAK_PROCESS_CODE #AC00 ; CTRL+C
DEFINE USE_E1_SCANCODE 0
DEFINE CLASSIC_CURSOR 0
;
;LD_DSK EQU 16 ; ¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å HDD ¤¨áª®¢ ¢ á¨á⥬¥
@ -94,7 +98,6 @@ DSS_MAX_DRIVES_AMOUNT EQU 26
DEFINE NeedSafePort_Y 1
DEFINE TABisSPACES 0
DEFINE EnoughtOnly_LF 0
DEFINE CLASSIC_CURSOR 0
DEFINE MINIMUM_BIOS_VERSION 2*256 + 55 ; version 2.55
DEFINE CHECK_DRIVE_CHANGE 1 ; 1 - â®à¬®§­¥¥, ­® ¡¥§®¯ á­¥¥
;

View File

@ -222,7 +222,7 @@ cmd_dir:
ld de,PRM2 ; ªã¤ 
call ncopy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
; %3
ld hl,screen_path
ld hl,screen_path ; !FIXIT ¥á«¨ ¢¢¥á⨠"DIR gamez\*.*", â® ®â®¡à ¦ ¥¬ë© ¯ãâì ¢ § £®«®¢ª¥ ¡ã¤¥â ­¥¢¥à­ë¬
ld de,PRM3 ; 16 ¡ãä¥à
CALL copy_string ; ᪮¯¨à. áâபã (á ­ã«¥¬)
;

View File

@ -109,7 +109,7 @@ RUN_EXT: ex de,hl ;
jp z,RUN_BAT ; ¢ë¯®«­¨âì bat-ä ©« (batch.asm)
jr RUN_EXE ; ¢ë¯®«­¨âì exe-ä ©«
.NON_EXT:
ld bc,0*256 + Dss.Exec ; § £à. ¨ ¢ë¯®«­¨âì ¯à®£à ¬¬ã
ld bc,Dss.Exec ; § £à. ¨ ¢ë¯®«­¨âì ¯à®£à ¬¬ã
RST ToDSS
;[x] 01/11/23 ;!TEST
PUSH AF
@ -158,7 +158,7 @@ RUN_EXT: ex de,hl ;
; ‚믮«­¨âì exe-ä ©«
; hl=¨¬ï ä ©« 
RUN_EXE:
ld bc,0*256 + Dss.Exec ; § £à㧨âì ¯à®£à ¬¬ã, ¢ë¯®«­¨âì ä ©«
ld bc,Dss.Exec ; § £à㧨âì ¯à®£à ¬¬ã, ¢ë¯®«­¨âì ä ©«
RST ToDSS
;[x] 01/11/23 ;!TEST

View File

@ -10,7 +10,7 @@ print_err_message:
ld bc,ERR0.Size ; à §¬¥à ¬ áᨢ 
call LCPIR ; ­ ©â¨ áâபã
call PRINTZ ; ä®à¬ â. ¢ë¢®¤ áâப¨
call newline
; call newline
jp newline

View File

@ -1 +1 @@
312
314

@ -1 +1 @@
Subproject commit 3941b4176ff1c200fe0cca11bc5bbe7de1b69b68
Subproject commit 18c132c6e9b507cb92d2144f5497278f021a0292