diff --git a/DSS/API.asm b/DSS/API.asm index e2a7cc0..bded5af 100644 --- a/DSS/API.asm +++ b/DSS/API.asm @@ -66,6 +66,7 @@ include 'API/Environ.ASM' include 'API/Lib_Sub.asm' include "API/EXECUTE.ASM" + include "API/Print.asm" diff --git a/DSS/API/Print.asm b/DSS/API/Print.asm new file mode 100644 index 0000000..c8585f7 --- /dev/null +++ b/DSS/API/Print.asm @@ -0,0 +1,74 @@ +;/////////////////////////////////////////////////////////////////////// +; Функция #5F. Вывод символа на принтер без ожидания. +; +; Интерпретация байта состояния принтера: +; 0..2 - не используются, обычно уст. в "1" +; 3 - ошибка принтера - есть/нет (1/0) +; 4 - принтер подключен/не подключен (1/0) +; 5 - бумаги нет/есть (1/0) +; 6 - принтер готов/выводит очередной символ (1/0) +; 7 - принтер свободен/занят (1/0) +; +; вход: A - символ +; выход: B - символ +; CF - ошибка, A=байт состояния (биты 7..3) +;/////////////////////////////////////////////////////////////////////// +Z84_SP: +.LPT_A EQU Z84.SIO.Ch_B.Ctrl +.LPT_B EQU Z84.PIO.Port_A.Data +.LPT1_C EQU Z84.PIO.Port_A.Command +.LPT2_D EQU Z84.PIO.Port_B.Data +.LPT2_C EQU Z84.PIO.Port_B.Command +; +PRINT: AND A + LD B,A ; сохраняем символ + ; + LD A,R + DI + PUSH AF + ; reg 0 + XOR A + OUT (Z84_SP.LPT_A),A + LD A,%0001'0000 ; Reset EXT/STATUS interrupts + OUT (Z84_SP.LPT_A),A + XOR A + OUT (Z84_SP.LPT_A),A + IN A,(Z84_SP.LPT_A) ; IN (1Bh): bit 5 - busy, Bit 3 - Ack + LD C,A + BIT 5,A ; IN (19h): bit 5 - Paper Enable, Bit 3 - Select + JR NZ,.LPTBUSY + AND %11011000 + JR Z,.LPTBUSY + LD A,B ; восстанавливаем символ + OUT (Z84_SP.LPT_B),A + POP AF + RET PO + EI + RET + ; +.LPTBUSY: POP AF + LD A,C + SCF + RET PO + EI + RET +; ; ; + +; B - SYMBOL +; CF = 1 - PRINTER BUSY +PRINT_INIT: DI + LD A,#CF + ; port #1F только чеpез LD BC,1F : Out (BC),reg (в альтере идёт перехват этого порта проца, если он в команде явно указан) + LD BC,Z84_SP.LPT2_C + OUT (C),A + ;[x] 29/9/23 + ;LD A,#63 + LD A,63 + ; + OUT (C),A + LD A,#C0 ; Bit 7 - Select (1), Bit 6 - Auto_Line_Feed (1) + OUT (Z84_SP.LPT2_D),A + LD A,#0F ; Init printer port for Out + OUT (Z84_SP.LPT1_C),A + RET +;/////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/DSS/FS/FAT/FAT.asm b/DSS/FS/FAT/FAT.asm index 4b99c59..c577793 100644 --- a/DSS/FS/FAT/FAT.asm +++ b/DSS/FS/FAT/FAT.asm @@ -790,7 +790,7 @@ RD_BPB: ; LD C,SLOT3 RLA ; LD C,A - LD B,0 ; BC - File handels in sectors + LD B,0 ; BC - File handels per sector ;;;; IF COMPILE_UNUSED_CODE LD (CORE_BUFFERS.FatBuffer.FilesPerSector),A @@ -861,9 +861,9 @@ RD_BPB: ; LD C,SLOT3 LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.SectorsPerDrive) LD A,H OR L + LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L) JP NZ,.HDDSMAL ; - LD DE,(CORE_BUFFERS.FatBuffer.FirstDataSector_L) EXX LD HL,(CORE_BUFFERS.SECTOR_BUFFER + BOOT_SECTOR.BPB_BIG_TOTAL_SECTORS_H) PUSH HL ; Total Sectors high diff --git a/DSS/Procedures.asm b/DSS/Procedures.asm index c5db6f0..8356e6b 100644 --- a/DSS/Procedures.asm +++ b/DSS/Procedures.asm @@ -107,14 +107,7 @@ RMKTIME: ; E - месяц ; IX - год ; выход: H - день недели (1 - воскресенье) -CalcDayOfWeek: ;!FIXIT вычислять день недели - ; x = (14 ? месяц) / 12 - ; y = год ? x - ; m = месяц + 12 * x ? 2 - ; ДеньНедели = (7000 + (день + y + y/4 ? y/100 + y/400 + (31 * m)/12)) mod 7 - ; Все деления целочисленные (остаток отбрасывается). - ; - LD A,D +CalcDayOfWeek: LD A,D LD (.day),A ; x = (14 ? месяц) / 12 ; y = год ? x @@ -203,6 +196,11 @@ CalcDayOfWeek: ;!FIXIT LD H,L INC H RET +; x = (14 ? месяц) / 12 +; y = год ? x +; m = месяц + 12 * x ? 2 +; ДеньНедели = (7000 + (день + y + y/4 ? y/100 + y/400 + (31 * m)/12)) mod 7 +; Все деления целочисленные (остаток отбрасывается). ;----------------------------------------------------------------------; diff --git a/DSS/VIDEO.ASM b/DSS/VIDEO.ASM index b00b26e..9aa6285 100644 --- a/DSS/VIDEO.ASM +++ b/DSS/VIDEO.ASM @@ -690,94 +690,7 @@ BACKTXT: PUSH AF POP BC NOBACKT: POP AF RET - -;///////////////////////////////////////////////////////////////////// -; Функция #5F. Вывод символа на принтер без ожидания. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; -; Интерпретация байта состояния принтера: -; 0..2 - не используются, обычно уст. в "1" -; 3 - ошибка принтера - есть/нет (1/0) -; 4 - принтер подключен/не подключен (1/0) -; 5 - бумаги нет/есть (1/0) -; 6 - принтер готов/выводит очередной символ (1/0) -; 7 - принтер свободен/занят (1/0) -; -; вход: A - символ -; выход: B - символ -; CF - ошибка, A=байт состояния (биты 7..3) -;///////////////////////////////////////////////////////////////////// -;!FIXIT заменить на sp2000.inc -LPT_A EQU #1B -LPT_B EQU #1C - -PRINT: AND A - LD B,A ; сохраняем символ - ; - LD A,R - DI - PUSH AF - ; - XOR A - OUT (LPT_A),A - LD A,#10 - OUT (LPT_A),A - XOR A - OUT (LPT_A),A - IN A,(LPT_A) ; IN (1Bh): bit 5 - busy, Bit 3 - Ack - LD C,A - BIT 5,A ; IN (19h): bit 5 - Paper Enable, Bit 3 - Select - JR NZ,LPTBUSY - AND %11011000 - JR Z,LPTBUSY - LD A,B ; восстанавливаем символ - OUT (LPT_B),A - POP AF - RET PO - EI - RET -LPTBUSY: - POP AF - LD A,C - SCF - RET PO - EI - RET - -; B - SYMBOL -; CF = 1 - PRINTER BUSY -;!FIXIT заменить на sp2000.inc -LPT1_C EQU #1D -LPT2_D EQU #1E -LPT2_C EQU #1F -PRINT_INIT: - DI - LD A,#CF ; port #1F только чеpез LD BC,1F : Out (BC),reg (в альтере идёт перехват этого порта проца, если он в команде явно указан) - LD BC,LPT2_C - OUT (C),A - ;[x] 29/9/23 - ;LD A,#63 - LD A,63 - ; - OUT (C),A - LD A,#C0 ; Bit 7 - Select (1), Bit 6 - Auto_Line_Feed (1) - OUT (LPT2_D),A - LD A,#0F ; Init printer port for Out - OUT (LPT1_C),A - - ; клава - XOR A ;LD A,0 - OUT (Z84.SIO.Ch_A.Ctrl),A - ;[x] 29/9/23 - INC A - OUT (Z84.SIO.Ch_A.Ctrl),A - DEC A - ; - OUT (Z84.SIO.Ch_A.Ctrl),A - - LD A,5 - OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,#62 ; bit 7 - Direction for Bufer (0), Bit 1 - Bufer Enable (1) - OUT (Z84.SIO.Ch_A.Ctrl),A - RET ;//MODULE: VIDEO ;[END] \ No newline at end of file diff --git a/DSS/build.txt b/DSS/build.txt index d8292c2..7ccfcb1 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -996 \ No newline at end of file +997 \ No newline at end of file diff --git a/DSS/drivers/Input/MOUSE.ASM b/DSS/drivers/Input/MOUSE.ASM index 93dda3a..cb915b2 100644 --- a/DSS/drivers/Input/MOUSE.ASM +++ b/DSS/drivers/Input/MOUSE.ASM @@ -1052,7 +1052,7 @@ MOUSE_COORDINATES: .Y: DB #00 MOUSE_BUTTONS: DB #00 -;MB_OLD DB #00 ; !FIXIT - не нужно? +;MB_OLD DB #00 MIN_X: DW 0 MAX_X: DW 319 MIN_Y: DW 0 diff --git a/SHELL/SHELL.ASM b/SHELL/SHELL.ASM index 14b098d..8908e4f 100644 --- a/SHELL/SHELL.ASM +++ b/SHELL/SHELL.ASM @@ -172,6 +172,7 @@ option_c: ; Можно выйти по EXIT, но не из запущенного boot-загрузчиком. ;--------------------------------------------------------------- FPRIMAR: + halt ld c,Dss.CTRLKey ; узнать сост. клавы в данный момент RST ToDSS ld hl,autoexec_fname ; имя файла "system.bat" diff --git a/SHELL/build.txt b/SHELL/build.txt index 5a40cf6..662d98c 100644 --- a/SHELL/build.txt +++ b/SHELL/build.txt @@ -1 +1 @@ -435 \ No newline at end of file +436 \ No newline at end of file