diff --git a/BOOT/boot.asm b/BOOT/boot.asm index ddab7f7..aee1f22 100644 --- a/BOOT/boot.asm +++ b/BOOT/boot.asm @@ -350,7 +350,7 @@ write_to_: ld a,(disk) ; ret z ; !TODO загрузка с расширенного раздела не поддерживается dec c push bc ; B - PHISICAL DRIVE NUMBER, C - PARTITION RECORD NUMBER IN DRIVE MBR - ; [ ] 02/02/2024 проверка на влезаемость загрузчика (чтоб не попортить фат) + ; [x] 02/02/2024 проверка на влезаемость загрузчика (чтоб не попортить фат) LD HL,0 LD IX,0 LD DE,buffer diff --git a/DSS/API.asm b/DSS/API.asm index e30b22f..10c7d9d 100644 --- a/DSS/API.asm +++ b/DSS/API.asm @@ -58,6 +58,7 @@ include 'API/Read.asm' include 'API/Write.asm' include 'API/Environ.ASM' + include 'API/Lib_Sub.asm' diff --git a/DSS/API/Find.asm b/DSS/API/Find.asm index c3c3972..e6875b5 100644 --- a/DSS/API/Find.asm +++ b/DSS/API/Find.asm @@ -3,7 +3,7 @@ ; C - #19 ; HL - указатель на файловую спецификацию ; DE - рабочий буфер 44 байта, если B=0, иначе 256 байт -; ;!!!!! на самом деле сейчас если B=1, рабочий буфер 46 байт +; ;!!!!! на самом деле пока что если B=1, рабочий буфер 46 байт ; A - атрибуты, используемые при поиске ; B = 0 - имя найденного файла в формате 11 байт "FilenameExt" ; B = 1 - имя найденного файла в формате DOS "filename.ext",0 diff --git a/DSS/API/Lib_Sub.asm b/DSS/API/Lib_Sub.asm new file mode 100644 index 0000000..faaeac5 --- /dev/null +++ b/DSS/API/Lib_Sub.asm @@ -0,0 +1,14 @@ +;[ ] 11/02/2024 - Функция с пополняемыми подфункциями))) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; B = 1 Вызов функции SETUP_CURSORS для восстановления системных шрифтов DSS ; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +LIB_SUB: + DJNZ 1F + ; func B = 1 + JP SETUP_CURSORS + ; +1: ; func B > 1 or 0 + SCF + RET + ; +; \ No newline at end of file diff --git a/DSS/API/Read.asm b/DSS/API/Read.asm index e5b1a00..c314c4e 100644 --- a/DSS/API/Read.asm +++ b/DSS/API/Read.asm @@ -28,7 +28,7 @@ READ: LD (.R_POINT),HL ; RR L ; RR D ; RR E - LD H,0 + LD H,0 ; LD L,(IY+_sFM.F_POSITION+3) LD D,(IY+_sFM.F_POSITION+2) LD E,(IY+_sFM.F_POSITION+1) diff --git a/DSS/DSS-MAIN.ASM b/DSS/DSS-MAIN.ASM index b0c8375..68f82ab 100644 --- a/DSS/DSS-MAIN.ASM +++ b/DSS/DSS-MAIN.ASM @@ -392,7 +392,7 @@ ADRST10: ;DS 512 ;,0 DB low FREEMEM, low GETMEM, low RETMEM, low SETMEM, low EXEC, low LEAVE, low WAIT, low GSWITCH, low DOSNAME, low EX_PATH ; 6 3C..45 DB low ENVIRON, low APPINFO, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS, low NOPS ; 7 46..4F DB low SETVMOD, low GETVMOD, low LOCATE, low CURSOR, low SELPAGE, low SCROLL, low CLEAR, low RDCHAR, low WRCHAR, low WINCOPY ; 8 50..59 - DB low WINREST, low PUTCHAR, low PCHARS, low NOPS, low NOPS, low PRINT ; 9 5A..5F + DB low WINREST, low PUTCHAR, low PCHARS, low LIB_SUB, low NOPS, low PRINT ; 9 5A..5F IFN SHORT_RSTx10_TABLE ;[ ] R09 @@ -419,7 +419,7 @@ ADRST10: ;DS 512 ;,0 DB high FREEMEM, high GETMEM, high RETMEM, high SETMEM, high EXEC, high LEAVE, high WAIT, high GSWITCH,high DOSNAME, high EX_PATH DB high ENVIRON, high APPINFO, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS, high NOPS DB high SETVMOD, high GETVMOD, high LOCATE, high CURSOR, high SELPAGE,high SCROLL, high CLEAR, high RDCHAR, high WRCHAR, high WINCOPY - DB high WINREST, high PUTCHAR, high PCHARS, high NOPS, high NOPS, high PRINT + DB high WINREST, high PUTCHAR, high PCHARS, high LIB_SUB,high NOPS, high PRINT IFN SHORT_RSTx10_TABLE ;[ ] R09 diff --git a/DSS/FS/FAT/FAT.asm b/DSS/FS/FAT/FAT.asm index fe65b7c..a473c61 100644 --- a/DSS/FS/FAT/FAT.asm +++ b/DSS/FS/FAT/FAT.asm @@ -340,10 +340,15 @@ LOADDIR: ; LD A,(FatBuffer.DRIVE) ; номер диска LD (IY+_sFM.DRIVE),A ; сохр. в дескриптор - LD D,(IY+_sFM.ST_CLUSTER) ; de=номер первого кластера - LD E,(IY+_sFM.ST_CLUSTER+1) - LD A,D - OR E + ; + ;LD D,(IY+_sFM.ST_CLUSTER+1) ; de=номер первого кластера + ;LD E,(IY+_sFM.ST_CLUSTER) + ;LD A,D + ;OR E + ; номер первого кластера + LD A,(IY+_sFM.ST_CLUSTER) + OR (IY+_sFM.ST_CLUSTER+1) + ; JP Z,.LROTDIR ; root ?? LD HL,DIRPAGE.buffer ; куда LD DE,#4000 ; сколько @@ -567,7 +572,7 @@ RD_BPB: LD C,SLOT3 .loop1: ADD HL,DE DEC A JR NZ,.loop1 - LD (FatBuffer.DIR_FRM),HL ; first sector DIR + LD (FatBuffer.DIR_FRL),HL ; first sector DIR ; CF = ? мало ли AND A ; CF = 0 @@ -615,7 +620,7 @@ RD_BPB: LD C,SLOT3 LD B,0 LD (FatBuffer.DIR_S_S),A ADD HL,BC ; Start DATA area - LD (FatBuffer.DAT_FRM),HL + LD (FatBuffer.DAT_FRL),HL ;!TODO не используются значения вычисляемые и сохраняемые в FatBuffer //////////////////////////////////////////////////////////////////////// ;IF COMPILE_UNUSED_CODE @@ -706,7 +711,7 @@ RD_BPB: LD C,SLOT3 ;ENDIF //////////////////////////////////////////////////////////////////////// - LD DE,(FatBuffer.DAT_FRM) + LD DE,(FatBuffer.DAT_FRL) ; LD E,(IY+_sBOOT_SEC.HIDDEN) ;Hidden sec ; LD D,(IY+_sBOOT_SEC.HIDDEN+1) ; AND A @@ -805,26 +810,26 @@ DOS_X_Error: ; ;!TODO к буферам! FatBuffer: -.MSG: DB 'FAT' -.READ_PG: DB #00 ;!TODO не используются некоторые значения, но задумка неплохая))) -.BLOCK: DB #00 -.DIR_CLU: DW #0000 -.DRIVE: DB #FF -.FAT_FRM: -.FAT1_XX: DW #0000 ; MSD_FAT_SEC first sector FAT -.FAT2_XX: DW #0000 -.DIR_FRH: DW #0000 ; MSD_CAT_SEC first sector DIR -.DIR_FRL: -.DIR_FRM: DW #0000 ; MSD_CAT_SEC first sector DIR -.F_P_S: DB #00 ; число файловых записей в секторе -.DIR_S_S: DB #00 ; DIR_SEC_SIZE -.DAT_FRM: DW #0000 ; MSD_DAT_SEC +.MSG: DB 'FAT' +.READ_PG: DB #00 ;!TODO не используются некоторые значения, но задумка неплохая))) +.BLOCK: DB #00 +.DIR_CLU: DW #0000 +.DRIVE: DB #FF +.FAT_FRM: +.FAT1_XX: DW #0000 ; MSD_FAT_SEC first sector FAT +.FAT2_XX: DW #0000 +.DIR_FRH: DW #0000 ; MSD_CAT_SEC first sector DIR ; !TODO ограничение в 32 Гига ;!FIXIT не используется +.DIR_FRL: DW #0000 ; MSD_CAT_SEC first sector DIR +.F_P_S: DB #00 ; число файловых записей в секторе +.DIR_S_S: DB #00 ; DIR_SEC_SIZE +.DAT_FRL: DW #0000 ; MSD_DAT_SEC low +;.DAT_FRH: DW #0000 ; MSD_DAT_SEC high ; !TODO ограничение в 32 Гига ;!FIXIT не используется .CLU_LEN: -.B_P_C: DW #0000 ; CLUSTER_LEN -.C_P_B: DB #00 ; A - Clusters per bank (16k) (число кластеров на блок ОЗУ) ; ????? это используется? -.FAT_TYP: DB #00 ; TYPE FAT (#32 - 12bit, #36 - 16bit) -.S_X_H: DW #0000 ; количество секторов на цилиндре ; ????? это используется? -.ENDCLUS: DW #FFFF +.B_P_C: DW #0000 ; CLUSTER_LEN +.C_P_B: DB #00 ; A - Clusters per bank (16k) (число кластеров на блок ОЗУ) ; ????? это используется? +.FAT_TYP: DB #00 ; TYPE FAT (#32 - 12bit, #36 - 16bit) +.S_X_H: DW #0000 ; количество секторов на цилиндре ; ????? это используется? +.ENDCLUS: DW #FFFF ; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ; diff --git a/DSS/FS/FAT/FAT12_16.asm b/DSS/FS/FAT/FAT12_16.asm index 6ea9706..0443740 100644 --- a/DSS/FS/FAT/FAT12_16.asm +++ b/DSS/FS/FAT/FAT12_16.asm @@ -442,7 +442,7 @@ GET_FAT12_CELL: ; in: HL - CLUSTER ; out: HL:IX - SECTOR NSECTOR: - LD DE,0 + LD DE,0 ;!FIXIT for FAT32 DEC HL DEC HL LD A,(CORE_BUFFERS.BootSector.S_P_C) @@ -460,7 +460,7 @@ NSECTOR: .skip: EX DE,HL LD XL,E LD XH,D - LD DE,(FatBuffer.DAT_FRM) ;first data sector + LD DE,(FatBuffer.DAT_FRL) ;first data sector XOR A ADD IX,DE LD D,A @@ -962,7 +962,7 @@ FAT_Max_Cluster: WORD #0FF0 ; ; JR NC,ADD_DE2 ; INC HL ; ADD_DE2: DJNZ ADD_DE1 -; LD DE,(FatBuffer.DAT_FRM) ;first data sector +; LD DE,(FatBuffer.DAT_FRL) ;first data sector ; ADD IX,DE ; LD DE,#0000 ; ADC HL,DE diff --git a/DSS/INTMOUSE.ASM b/DSS/INTMOUSE.ASM index 835a3cf..6002636 100644 --- a/DSS/INTMOUSE.ASM +++ b/DSS/INTMOUSE.ASM @@ -158,9 +158,9 @@ M_RESR LD A,DSS_Error.mouse.INVALID_COMMAND ;!TODO на биос. MS_INIT DI ;!TEST mouse - ;LD A,85 + ;LD A,#55 ;OUT (#10),A - ;LD A,45 + ;LD A,#2D ;OUT (#10),A ; XOR A ;LD A,0 @@ -176,9 +176,7 @@ MS_INIT DI LD A,4 OUT (PORT_MOUSE.Ctrl),A ;!TEST mouse - LD A,#47 ; первый множитель = 16 875000/Мн1*Мн2=1215 - ;LD A,#44 - ;LD A,#04 ; первый множитель = 1 875000/Мн1*Мн2=4807 + LD A,MOUSE_BAUD.multiplier_1 ; первый множитель OUT (PORT_MOUSE.Ctrl),A ; LD A,5 @@ -192,8 +190,7 @@ MS_INIT DI ;!TEST mouse LD A,#55 OUT (Z84.CTC.Ch_0),A - LD A,#2D ; второй множитель = 45 875000/Мн1*Мн2=1215 - ;LD A,#B6 ; второй множитель = 182 875000/Мн1*Мн2=4807 + LD A,MOUSE_BAUD.multiplier_2 ; второй множитель OUT (Z84.CTC.Ch_0),A ; @@ -211,7 +208,7 @@ MS_SHOW PUSH IX DI CALL MOUSE XOR A - LD (REFRESH+1),A + LD (REFRESH.hide),A EI POP AF EX AF,AF' @@ -228,7 +225,7 @@ MS_HIDD PUSH IX PUSH AF DI LD A,1 - LD (REFRESH+1),A + LD (REFRESH.hide),A CALL RESTORE EI POP AF @@ -373,272 +370,253 @@ MS_GSEN LD HL,(SENSEXY) XOR A RET +;----------------------------------------------------------------------; -MOUSET LD (REST_XT+1),HL - LD (REST_YT+1),DE -;Y - SRL D - RR E - SRL D - RR E - SRL D - RR E - LD D,E -;X - SRL H - RR L - SRL H - RR L - SRL H - RR L - LD E,L - - IN A,(PORT_Y) - LD XH,A - IN A,(SLOT1) - LD XL,A -; - DI -; - LD A,#54 ;!HARDCODE video page - OUT (SLOT1),A -; - LD A,D - ADD A,A - ADD A,A ;Y * 4 - LD L,A - LD H,#43 ;+ #4300 -; - IN A,(RGMOD) - RRCA - AND #80 - OR #01 - ADD A,E - OUT (PORT_Y),A - INC L - LD A,(HL) ;SIMBOL - LD BC,(ANDXORS) - AND B - XOR C - LD (HL),A - INC L - LD A,(HL) ;ATTRIBUT - LD BC,(ANDXORA) - AND B - XOR C - LD (HL),A -; - LD A,XL - OUT (SLOT1),A - LD A,XH - OUT (PORT_Y),A - RET - -RESTORT: -REST_XT: LD HL,#0000 -REST_YT: LD DE,#0000 -;Y - SRL D - RR E - SRL D - RR E - SRL D - RR E - LD D,E -;X - SRL H - RR L - SRL H - RR L - SRL H - RR L - LD E,L - - IN A,(PORT_Y) - LD XH,A - IN A,(SLOT1) - LD XL,A -; - DI -; - LD A,#50 - OUT (SLOT1),A -; - LD A,D - ADD A,A - ADD A,A ;Y * 4 - LD L,A - LD H,#43 ;+ #4300 -; - IN A,(RGMOD) - RRCA - AND #80 - OR #01 - ADD A,E - OUT (PORT_Y),A - INC L - LD A,(HL) ;SIMBOL - LD (HL),A - INC L - LD A,(HL) ;ATTRIBUT - LD (HL),A -; - LD A,XL - OUT (SLOT1),A - LD A,XH - OUT (PORT_Y),A - RET +;----------------------------------------------------------------------; RESTORE: -.sw+1: LD A,#00 - BIT 7,A - JP Z,RESTORT -RESTORG IN A,(SLOT3) - LD B,A - IN A,(PORT_Y) - LD C,A - PUSH BC - LD A,#50 ;!HARDCODE videopage - OUT (SLOT3),A -REST_X LD HL,0 -REST_Y LD DE,0 - LD A,E - EX AF,AF' -REST_V LD A,#00 - AND 1 - LD DE,#C000 ;screen 0 - JR Z,AA2 - LD DE,#C000+320 ;screen 1 -AA2 ADD HL,DE -REST_A LD A,0 - LD XH,A - EX AF,AF' -REST_H -RS002 LD BC,10 - OUT (PORT_Y),A - EX AF,AF' - LD (PUSH_HL),HL - LD D,H - LD E,L - LDIR -PUSH_HL+1: LD HL,#0000 -; POP HL - EX AF,AF' - INC A - JR Z,RS003 - DEC XH - JR NZ,RS002 -RS003 POP BC - LD A,B - OUT (SLOT3),A - LD A,C - OUT (PORT_Y),A - XOR A - RET - +.sw+1: LD A,#00 + BIT 7,A + JP Z,.TXT + ; restore gfx-mode + IN A,(SLOT3) + LD B,A + IN A,(PORT_Y) + LD C,A + PUSH BC + LD A,#50 ;!HARDCODE videopage + OUT (SLOT3),A +.X+1: LD HL,0 +.Y+1: LD DE,0 + LD A,E + EX AF,AF' +.SCR+1: LD A,0 + AND 1 + LD DE,SLOT3.MEM_ADDR ;screen 0 + JR Z,.adr + LD DE,SLOT3.MEM_ADDR+320 ;screen 1 +.adr: ADD HL,DE +.YSize+1: LD A,0 + LD XH,A + EX AF,AF' +.loop: ; +.Xsize+1: LD BC,10 + OUT (PORT_Y),A + EX AF,AF' + LD (.PUSH_HL),HL + LD D,H + LD E,L + LDIR +.PUSH_HL+1: LD HL,#0000 + EX AF,AF' + INC A + JR Z,.no_dec + DEC XH + JR NZ,.loop +.no_dec: POP BC + LD A,B + OUT (SLOT3),A + LD A,C + OUT (PORT_Y),A + XOR A + RET +.TXT: ; restore txt-mode +.TXT_X+1: LD HL,#0000 +.TXT_Y+1: LD DE,#0000 + ; + IN A,(PORT_Y) + LD XH,A + IN A,(SLOT3) + LD XL,A + ; + LD A,#50 + ; + CALL GET_SYMBOL_ADDR + ; + LD (HL),A + INC L + LD A,(HL) ;ATTRIBUT + ;JR SET_RESTORE_EXIT +;---------------------------------------------------------------; +SET_RESTORE_EXIT: + LD (HL),A + ; + LD A,XL + OUT (SLOT3),A + LD A,XH + OUT (PORT_Y),A + RET +;---------------------------------------------------------------; +GET_SYMBOL_ADDR:;Y + SRL D + RR E + SRL D + RR E + SRL D + RR E + LD D,E + ;X + SRL H + RR L + SRL H + RR L + SRL H + RR L + LD E,L + ; + DI + OUT (SLOT3),A + ; + LD A,D + ADD A,A + ADD A,A ;Y * 4 + LD L,A + LD H,high (SLOT3.MEM_ADDR + #300) ;#300 - описатели экрана + ; + IN A,(SCREEN_SWITCH) + RRCA + AND #80 + OR #01 + ADD A,E + OUT (PORT_Y),A + INC L + LD A,(HL) ;SIMBOL + ; + RET +;---------------------------------------------------------------; +;----------------------------------------------------------------------; ;HL/DE - X/Y +MOUSE: LD A,(MODE_M) + LD (RESTORE.sw),A + BIT 7,A + JP NZ,.GFX + ; + ; set txt-mode +.TXT: LD (RESTORE.TXT_X),HL + LD (RESTORE.TXT_Y),DE + ; + IN A,(PORT_Y) + LD XH,A + IN A,(SLOT3) + LD XL,A + ; + LD A,#54 + ; + CALL GET_SYMBOL_ADDR + ; + LD BC,(ANDXORS) + AND B + XOR C + LD (HL),A + INC L + LD A,(HL) ;ATTRIBUT + LD BC,(ANDXORA) + AND B + XOR C + JR SET_RESTORE_EXIT + ; + ;set gfx-mode +.GFX: CP #82 ;640x256x16 + JR NZ,.NOFIX_640 + SRL H + RR L +.NOFIX_640: LD IX,M_IMAGE + LD A,(M_XSIZE) + LD C,A + LD B,0 + LD (REALXS),BC + LD (RESTORE.Xsize),BC + LD C,B + LD (SKIPXF),BC + LD A,(M_YSIZE) + LD (RESTORE.YSize),A + LD C,A + LD B,0 + LD (REALYS),BC + LD BC,(YHOT_SP) + LD A,E + SUB C + LD E,A + JR NC,.GOOD_Y + NEG + LD E,A + LD A,(M_XSIZE) + LD C,A + LD B,0 + LD A,(M_YSIZE) + SUB E +.SKIPMY: ADD IX,BC + DEC E + JR NZ,.SKIPMY + LD C,A + LD (REALYS),BC +.GOOD_Y: LD BC,(XHOT_SP) + AND A + SBC HL,BC + JR NC,.GOOD_X + LD B,H + LD C,L + LD HL,0 + AND A + SBC HL,BC + LD (SKIPXF),HL + LD A,(M_XSIZE) + SUB L + LD L,A + LD (REALXS),HL + LD HL,0 +.GOOD_X: LD (RESTORE.X),HL + LD (RESTORE.Y),DE + ; + PUSH HL + IN A,(SLOT3) + LD H,A + IN A,(PORT_Y) + LD L,A + EX (SP),HL + LD A,#5C ;!HARDCODE videopage + OUT (SLOT3),A + LD A,E + EX AF,AF' + IN A,(SCREEN_SWITCH) + LD (RESTORE.SCR),A + AND 1 + LD DE,SLOT3.MEM_ADDR ;Screen 0 + JR Z,.adr + LD DE,SLOT3.MEM_ADDR+320 ;Screen 1 +.adr: ADD HL,DE + LD D,XH + LD E,XL + EX DE,HL ;HL - BITMAP + LD BC,(REALYS) + LD XH,C + EX AF,AF' + ; +.loop: LD BC,(SKIPXF) + ADD HL,BC + LD BC,(REALXS) + OUT (PORT_Y),A + EX AF,AF' + LD (.PUSH_DE),DE + LDIR +.PUSH_DE+1: LD DE,#0000 + EX AF,AF' + INC A + JR Z,.exit_loop + DEC XH + JR NZ,.loop + ; +.exit_loop: POP BC + LD A,B + OUT (SLOT3),A + LD A,C + OUT (PORT_Y),A + XOR A + RET +;----------------------------------------------------------------------; -MOUSE: LD A,(MODE_M) - LD (RESTORE.sw),A - BIT 7,A - JP Z,MOUSET -MOUSEG: CP #82 ;640x256x16 - JR NZ,NOFX - SRL H - RR L -NOFX: LD IX,M_IMAGE - LD A,(M_XSIZE) - LD C,A - LD B,0 - LD (REALXS),BC - LD (REST_H+1),BC - LD C,B - LD (SKIPXF),BC - LD A,(M_YSIZE) - LD (REST_A+1),A - LD C,A - LD B,0 - LD (REALYS),BC - LD BC,(YHOT_SP) - LD A,E - SUB C - LD E,A - JR NC,GOODY - NEG - LD E,A - LD A,(M_XSIZE) - LD C,A - LD B,0 - LD A,(M_YSIZE) - SUB E -SKIPMY: ADD IX,BC - DEC E - JR NZ,SKIPMY - LD C,A - LD (REALYS),BC -GOODY: LD BC,(XHOT_SP) - AND A - SBC HL,BC - JR NC,GOODX - LD B,H - LD C,L - LD HL,0 - AND A - SBC HL,BC - LD (SKIPXF),HL - LD A,(M_XSIZE) - SUB L - LD L,A - LD (REALXS),HL - LD HL,0 -GOODX: LD (REST_X+1),HL - LD (REST_Y+1),DE - PUSH HL - IN A,(SLOT3) - LD H,A - IN A,(PORT_Y) - LD L,A - EX (SP),HL - LD A,#5C ;!HARDCODE videopage - OUT (SLOT3),A - LD A,E - EX AF,AF' - IN A,(RGMOD) - LD (REST_V+1),A - AND 1 - LD DE,#C000 ;PAGE 0 - JR Z,AA1 - LD DE,#C000+320 ;PAGE 1 -AA1 ADD HL,DE - LD D,XH - LD E,XL - EX DE,HL ;HL - BITMAP - LD BC,(REALYS) - LD XH,C - EX AF,AF' -MS002 LD BC,(SKIPXF) - ADD HL,BC - LD BC,(REALXS) - OUT (PORT_Y),A - EX AF,AF' - ;PUSH DE - LD (PUSH_DE+1),DE - LDIR -PUSH_DE LD DE,#0000 -; POP DE - EX AF,AF' - INC A - JR Z,MS003 - DEC XH - JR NZ,MS002 -MS003 POP BC - LD A,B - OUT (SLOT3),A - LD A,C - OUT (PORT_Y),A - XOR A - RET +;----------------------------------------------------------------------; READ_M: IN A,(PORT_MOUSE.Ctrl) RRCA @@ -893,7 +871,8 @@ CONTROL CALL READ_M LD (REDY),A RET -REFRESH LD A,#01 +REFRESH: +.hide+1: LD A,#01 OR A RET NZ REDY+1: LD A,#00 diff --git a/DSS/KEYINTER.ASM b/DSS/KEYINTER.ASM index c6a7716..f95f3ab 100644 --- a/DSS/KEYINTER.ASM +++ b/DSS/KEYINTER.ASM @@ -179,11 +179,8 @@ ECHOKEY: CALL Cursor_On ; CALL Cursor_Off ; выкл. курсор POP AF OR A - ;!FIXIT scroll заменить на вывод символа биосом или WRCHAR - ; LD BC,1*256 + BIOS.LP_PRINT_SYM - ; RST ToBIOS - CALL NZ,PUTCHAR.NO_SCROLL ; добавил вывод "a" на экран - ; + ; [x] -bug with Vasil's version of cursor + CALL NZ,PUTCHAR.NO_SCROLL ; добавил вывод "a" на экран POP BC POP DE LD A,E @@ -261,17 +258,19 @@ cursor_interrupt: ; Настройка знакогенератора курсора черточкой SETUP_CURSORS: - in a,(SLOT2) +.buffer EQU #C000 + ; + in a,(SLOT3) push af ; сохр. порт ld a,(BANKTBL+TXTPAGE) ; 2-й лог. номер страницы расш. ДОС - out (SLOT2),a + out (SLOT3),a ; получить сист. знакоген. - ld de,#8000 ;!HARDCODE буфер для 2048 байт данных + ld de,.buffer ;!HARDCODE буфер для 2048 байт данных push de ld c,BIOS.WIN_GET_ZG ; получить знакоген. rst ToBIOS ; заполнить кодом #FF 2 нижние линии - ld hl,#8000+(2048-(2*256)) ;!HARDCODE последние 512 байт + ld hl,.buffer+(2048-(2*256)) ;!HARDCODE последние 512 байт ld bc,511 ld a,CURSOR_ZG; ; номер знакоген. "черточка" call .fill_data_font @@ -281,7 +280,7 @@ SETUP_CURSORS: ld a,INS_CUR_ZG ; номер знакоген. "блок" call .fill_data_font pop af - out (SLOT2),a ; восст. порт + out (SLOT3),a ; восст. порт ret ; Настройка знакоген. и его регистрация ; вход: a=номер знакоген. @@ -293,7 +292,7 @@ SETUP_CURSORS: ld (hl),#FF inc de ldir - ld de,#8000 ; знакоген. + ld de,.buffer ; знакоген. ld c,BIOS.WIN_SET_ZG ; уст. знакоген. rst ToBIOS ret diff --git a/DSS/Media_drivers/ReScanDRV.ASM b/DSS/Media_drivers/ReScanDRV.ASM index e5a5258..df9d2a6 100644 --- a/DSS/Media_drivers/ReScanDRV.ASM +++ b/DSS/Media_drivers/ReScanDRV.ASM @@ -286,7 +286,7 @@ ERROR_BOOTDRV_DIES: RST ToBIOS ; LD A,1 - OUT (RGMOD),A ; set scr-2 + OUT (SCREEN_SWITCH),A ; set scr-2 ; LD HL,.ERROR_MSG LD DE,#A000 diff --git a/DSS/Media_drivers/fdd-drv.asm b/DSS/Media_drivers/fdd-drv.asm index a3cd2c3..ba62c50 100644 --- a/DSS/Media_drivers/fdd-drv.asm +++ b/DSS/Media_drivers/fdd-drv.asm @@ -313,7 +313,7 @@ FDDRIVE: LD H,B EX DE,HL EXX - LD C,0 ;[ ] 17.12.2023 загрузка с активного раздела, а не с первого + LD C,0 ;[x] 17.12.2023 загрузка с активного раздела, а не с первого AND A RET diff --git a/DSS/Media_drivers/ram_disk-drv.asm b/DSS/Media_drivers/ram_disk-drv.asm index 13c811b..bf072fc 100644 --- a/DSS/Media_drivers/ram_disk-drv.asm +++ b/DSS/Media_drivers/ram_disk-drv.asm @@ -455,7 +455,7 @@ IOCTL_RD: SCF RET -; C - PARTITION RECORD NUMBER IN DRIVE MBR must be 0 here ;[ ] 17.12.2023 загрузка с активного раздела, а не с первого +; C - PARTITION RECORD NUMBER IN DRIVE MBR must be 0 here ;[x] 17.12.2023 загрузка с активного раздела, а не с первого ; HL:DE - SECTORS ON LOGICAL DISK ; HL' - CYLINDERS ON PHISICAL DISK ; DE' - HEADS ON PHISICAL DISK diff --git a/DSS/VIDEO.ASM b/DSS/VIDEO.ASM index 33e0530..ca7354a 100644 --- a/DSS/VIDEO.ASM +++ b/DSS/VIDEO.ASM @@ -47,20 +47,14 @@ PCHARS: LD A,(HL) ; выход: нет ;///////////////////////////////////////////////////////////////////// PUTCHAR: - CP #0D - JR Z,.CR_ - CP #0A - JR Z,.LF_ - CP #09 - JR Z,.TB_ - CP #08 - JR Z,.BK_ - CP #07 - JR Z,.BELL ; [x] Beep in PChars/PUTCHAR + ;CALL .NO_SCROLL + CP #0E + JR C,.control_characters ; -.CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM + LD BC,1*256 + BIOS.LP_PRINT_SYM ;[x] CR+LF+SCROLL RST ToBIOS + ; ; проверка на переход курсора в самое начало (X:Y == 0:0) CALL CURSOR LD A,D @@ -80,8 +74,7 @@ PUTCHAR: CALL LOCATE POP HL RET -.TB_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR - RST ToBIOS +.TB_: CALL CURSOR IF TABisSPACES LD B,E LD A,E @@ -99,15 +92,13 @@ PUTCHAR: LD E,A JP LOCATE ENDIF -.BK_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR - RST ToBIOS +.BK_: CALL CURSOR XOR A CP E RET Z DEC E JP LOCATE -.LF_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR - RST ToBIOS +.LF_: CALL CURSOR LD A,D CP #1F JR NC,.LFF @@ -118,8 +109,7 @@ PUTCHAR: CALL LOCATE ; !!!! НЕ разрывать LF_ и CR_ !!!! ENDIF -.CR_: LD C,BIOS.LP_GET_PLACE ;GET CURSOR - RST ToBIOS +.CR_: CALL CURSOR LD E,0 JP LOCATE ; [x] Beep in PChars/PUTCHAR @@ -132,6 +122,12 @@ PUTCHAR: ; ; [x] -bug with Vasil's version of cursor .NO_SCROLL: + CP #0E + JR C,.control_characters +._CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM + JP ToBIOS + ; +.control_characters: CP #0D JR Z,.CR_ CP #0A @@ -142,8 +138,7 @@ PUTCHAR: JR Z,.BK_ CP #07 JR Z,.BELL ; [x] Beep in PChars/PUTCHAR -._CHAR: LD BC,1*256 + BIOS.LP_PRINT_SYM - JP ToBIOS + RET ;-----[] ; ; @@ -397,14 +392,14 @@ GETVMOD: ; Функция #50. Выбор режима экрана. ; ; вход: A - режим экрана -; 02h - текстовый 40x32x16 цветов -; 03h - текстовый 80x32x16 цветов -; 81h - графический 320x256x256 цветов -; 82h - графический 640x256x16 цветов +; #02 - текстовый 40x32x16 цветов +; #03 - текстовый 80x32x16 цветов +; #81 - графический 320x256x256 цветов +; #82 - графический 640x256x16 цветов ; B - страница экрана 0/1 ; выход: A - код ошибки, если CF=1 ;///////////////////////////////////////////////////////////////////// -SETVMOD:;BIT 7,A +SETVMOD:; CP %1000'0000 LD C,A JR NC,GRAPH @@ -412,10 +407,8 @@ SETVMOD:;BIT 7,A PUSH IX EX AF,AF' LD A,(VMODE) - LD (VVMODE),A + LD (BACKTXT.VMODE),A EX AF,AF' - //INC A - //DEC A OR A JR Z,.NOMODE DEC A @@ -626,17 +619,18 @@ SAVETXT: PUSH AF PUSH AF LD C,BIOS.LP_GET_PLACE RST ToBIOS - LD (TCURS),DE + LD (BACKTXT.CURS),DE POP AF LD IX,#C000 LD HL,#2050 OR A JR NZ,.SVTEXT1 LD L,#28 -.SVTEXT1: LD (SVHL1),HL +.SVTEXT1: LD (BACKTXT.WinMax),HL LD DE,#0000 LD A,(BANKTBL+TXTPAGE) LD B,A + LD C,BIOS.WIN_COPY ;[x] 29/9/23 LD A,R @@ -659,7 +653,7 @@ SAVETXT: PUSH AF ;---------------------------------------------------------------------- BACKTXT: PUSH AF -VVMODE+1: LD A,#00 +.VMODE+1: LD A,#00 ;BIT 7,A CP %1000'0000 JR C,NOBACKT @@ -669,7 +663,7 @@ VVMODE+1: LD A,#00 PUSH HL PUSH IX LD IX,#C000 -SVHL1+1: LD HL,#2050 +.WinMax+1: LD HL,#2050 LD DE,#0000 LD A,(BANKTBL+TXTPAGE) LD B,A @@ -683,10 +677,10 @@ SVHL1+1: LD HL,#2050 RST ToBIOS ;[x] 29/9/23 POP AF - JP PO,1F + JP PO,.no_ei EI -1: ; -TCURS+1: LD DE,#0000 +.no_ei: ; +.CURS+1: LD DE,#0000 CALL LOCATE POP IX POP HL diff --git a/DSS/build.txt b/DSS/build.txt index 0dd217a..7bfae05 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -880 \ No newline at end of file +905 \ No newline at end of file diff --git a/DSS/defines.inc b/DSS/defines.inc index a9ce9c7..f5fd687 100644 --- a/DSS/defines.inc +++ b/DSS/defines.inc @@ -7,6 +7,10 @@ DEFINE COMPILE_UNUSED_CODE 0 ; +; + DEFINE MOUSE_COM_BAUD_4800 0 +; + ; ;LD_DSK EQU 16 ; максимальное количество логических HDD дисков в системе @@ -85,3 +89,17 @@ FMCOUNT EQU 10 ; HANDBUF.SIZE EQU 32 ;----------------------------------------------------; ; + +; +;----------------------------------------------------; + IF MOUSE_COM_BAUD_4800 +MOUSE_BAUD: +.multiplier_1 EQU #04 ; первый множитель = 1. 875000/Мн1*Мн2=4807 +.multiplier_2 EQU #B6 ; второй множитель = 182. 875000/Мн1*Мн2=4807 + ELSE +MOUSE_BAUD: +.multiplier_1 EQU #47 ; первый множитель = 16. 875000/Мн1*Мн2=1215 +.multiplier_2 EQU #2D ; второй множитель = 45. 875000/Мн1*Мн2=1215 + ENDIF +;----------------------------------------------------; +; \ No newline at end of file diff --git a/SHELL/Commands/CHDIR.ASM b/SHELL/Commands/CHDIR.ASM index 2c8fee3..0fda843 100644 --- a/SHELL/Commands/CHDIR.ASM +++ b/SHELL/Commands/CHDIR.ASM @@ -5,12 +5,10 @@ ;/////////////////////////////////////////////////// cmd_chdir: ex de,hl - ;ld de,T9186 ; буфер ld de,work_buffer1; ld c,Dss.GSwitch ; выделить параметр ком-строки RST ToDSS xor a - ;ld hl,T9186 ld hl,work_buffer1; cp (hl) jr nz,A877B @@ -23,9 +21,7 @@ cmd_chdir: dec hl A877B: ld c,Dss.ChDir ; сменить тек. каталог RST ToDSS - ;call c,print_err_message jp c,print_err_message ; вывод сообщения -; call newline jp Get_Path ; сохр. тек. диск и путь ; ; вывод сист. пути на экран ; ld c,8Eh ; узнать полож. курсора diff --git a/SHELL/Commands/DIR.ASM b/SHELL/Commands/DIR.ASM index 40c908f..cbf3019 100644 --- a/SHELL/Commands/DIR.ASM +++ b/SHELL/Commands/DIR.ASM @@ -520,7 +520,7 @@ T8B46: db "0 000 000 000",0 db 0 ; -; [ ] теперь не лезет напрямую, делает через новый параметр функции DskInfo +; [x] теперь не лезет напрямую, делает через новый параметр функции DskInfo ; иная логика получения метки тома - сначала ищется в корневой директории, ; если там нет, то берётся из BPB read_disk_info: diff --git a/Shared_Includes b/Shared_Includes index 4d37c33..795ad6a 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 4d37c338c31c060e7a42f1e47fad93b69af34a5b +Subproject commit 795ad6ac57585133e1ffb8f0baafb3751dda576c