From 9319bb78d96af2573dd54d8d2f422f2f134b5653 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Wed, 25 Oct 2023 01:37:22 +1000 Subject: [PATCH 01/21] ... --- constants/BIOS_equ.inc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/constants/BIOS_equ.inc b/constants/BIOS_equ.inc index 51e8f12..6972262 100644 --- a/constants/BIOS_equ.inc +++ b/constants/BIOS_equ.inc @@ -3,11 +3,11 @@ DZ 'Starting...' ENDM ; -;[Вызов функций .------------------- -ToBIOS EQU #08 -ToBIOS_18 EQU #18 -ToBIOS_3D13 EQU #3D13 -ToBIOS_FromEXT EQU #3FD0 +;[Вызов функций]----------------------- +ToBIOS EQU #08 ; для вызова из ОЗУ в SLOT0 (например из DSS) +ToBIOS_18 EQU #18 ; для вызова из 8-й страницы ПЗУ в SLOT0 +ToBIOS_3D13 EQU #3D13 ; для вызова из 8-й страницы ПЗУ в SLOT0 +ToBIOS_FromEXT EQU #3FD0 ; для вызова из 0-й страницы ПЗУ в SLOT0 ;--------------------------------------- BIOS: ;[Функции работы с памятью]------------- From 374477690571809e7318bd4279bc7da120b6c492 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Wed, 25 Oct 2023 02:44:26 +1000 Subject: [PATCH 02/21] ... --- constants/standart_colors.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/constants/standart_colors.inc b/constants/standart_colors.inc index 18c65e0..df9bb5f 100644 --- a/constants/standart_colors.inc +++ b/constants/standart_colors.inc @@ -1,6 +1,6 @@ - DEFINE StandartZXpallete 1 - DEFINE _DebuG_SAVEpallete 1 - DEFINE _DebuG_NumOfPallete 2 + ;DEFINE StandartZXpallete 1 + ;DEFINE _DebuG_SAVEpallete 1 + ;DEFINE _DebuG_NumOfPallete 2 ;-----------------------------------------------------------------------; MODULE COLORS MODULE CGA From 8b1e27746360a29951cc23f05f2fc6b7e7dc3e90 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Wed, 25 Oct 2023 02:53:56 +1000 Subject: [PATCH 03/21] ... --- constants/SP2000.inc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/constants/SP2000.inc b/constants/SP2000.inc index daa560d..863b32f 100644 --- a/constants/SP2000.inc +++ b/constants/SP2000.inc @@ -400,12 +400,11 @@ SLOT2 EQU #C2 ; SLOT3 EQU #E2 ; номер банки 3 .MEM_ADDR EQU #C000 - -PORT_Y EQU #89 ; вертикальная координата точки на графическом экран RGADR EQU #89 ; страница VIDEO-RAM для спектрумовского режима +PORT_Y EQU RGADR ; вертикальная координата точки на графическом экран ;RGSCR EQU #E9 = RGMOD RGMOD EQU #C9 ; порт режима экрана. Переключает страницы режима экрана. -SCREEN_SWITCH EQU RGMOD ; порт режима экрана. Переключает страницы режима экрана. +SCREEN_SWITCH EQU RGMOD ;RGACC EQU #A9 PGACC EQU #FC ; Порт масштабирования From f195bf9fbceef18858a8b59d04e0bc807548db56 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Fri, 27 Oct 2023 01:50:44 +1000 Subject: [PATCH 04/21] ... --- constants/dss_equ.inc | 167 +++++++++++++++++++++++------------------- 1 file changed, 90 insertions(+), 77 deletions(-) diff --git a/constants/dss_equ.inc b/constants/dss_equ.inc index ef64ca3..536cb47 100644 --- a/constants/dss_equ.inc +++ b/constants/dss_equ.inc @@ -1,6 +1,7 @@ ;[Вызов функций DSS]-------------------- -ToDSS EQU #10 +ToDSS EQU #10 .DRV EQU #18 +.Mouse EQU #30 ;--------------------------------------- ;---[Буфер под служебную строку DSS]---- @@ -151,28 +152,30 @@ Dss: ; ; Video .SetVMod EQU #50 -.SetVMod.txt40x32 EQU 2 -.SetVMod.txt80x32 EQU 3 -.SetVMod.grf320x256 EQU #81 -.SetVMod.grf6400x256 EQU #82 -.GetVMod EQU #51 -.Locate EQU #52 -.Cursor EQU #53 -.SelPage EQU #54 -.Scroll EQU #55 -.Clear EQU #56 -.RdChar EQU #57 -.WrChar EQU #58 -.WinCopy EQU #59 -.WinRest EQU #5A -.PutChar EQU #5B -.PChars EQU #5C +.SetVMod.txt40x32 EQU 2 ; текстовый 40x32x16 цветов +.SetVMod.txt80x32 EQU 3 ; текстовый 80x32x16 цветов +.SetVMod.grf320x256 EQU #81 ; графический 320x256x256 цветов +.SetVMod.grf640x256 EQU #82 ; графический 640x256x16 цветов +.GetVMod EQU #51 +.Locate EQU #52 +.Cursor EQU #53 +.SelPage EQU #54 +.Scroll EQU #55 +.Clear EQU #56 +.RdChar EQU #57 +.WrChar EQU #58 +.WinCopy EQU #59 +.WinRest EQU #5A +.PutChar EQU #5B +.PChars EQU #5C ; ; Printer .RES_PRN EQU #5D .CTRLPRN EQU #5E .Print EQU #5F -;--------------------------------------- +;----------------------------------------------------------------------; + +;----------------------------------------------------------------------; .DRV.Init EQU #00 .DRV.Open EQU #01 .DRV.Close EQU #02 @@ -194,20 +197,30 @@ Dss: .DRV.LongWrite EQU #11 ; .DRV.RescanDRV EQU #FF -;--------------------------------------- - - - -; -;------------[Video modes]-------------- -DssVmod: -.txt40 EQU #02 ; (02) - текстовый 40x32x16 цветов -.txt80 EQU #03 ; (03) - текстовый 80x32x16 цветов -.gfx320 EQU #81 ; (129) - графический 320x256x256 цветов -.gfx640 EQU #82 ; (130) - графический 640x256x16 цветов -;--------------------------------------- -; +;----------------------------------------------------------------------; +;----------------------------------------------------------------------; +.Mouse.Init EQU #00 +.Mouse.ShowCursor EQU #01 +.Mouse.HideCursor EQU #02 +.Mouse.ReadState EQU #03 +.Mouse.SetXY EQU #04 +;.Mouse.RESERVED EQU #05 +;.Mouse.RESERVED EQU #06 +.Mouse.SetBoundsY EQU #07 +.Mouse.SetBoundsX EQU #08 +.Mouse.SetCursorImage EQU #09 +.Mouse.SetCursorChar EQU #0A +.Mouse.GetCursorImage EQU #0B +;.Mouse.RESERVED EQU #0C +;.Mouse.RESERVED EQU #0D +.Mouse.GetSensitive EQU #0E +.Mouse.SetSensitive EQU #0F +.Mouse.GetPackets EQU #80 +.Mouse.SetVideoMode EQU #81 +;.Mouse.RESERVED EQU #82 +.Mouse.RefreshCursor EQU #83 +;----------------------------------------------------------------------; ; ;------------[Error codes]-------------- @@ -360,52 +373,52 @@ _cc: ; Приложение Б. Таблица позиционных кодов -; key ASCII/SCAN key ASCII/SCAN -; ` 000h 000h V 056h 02Dh -; Esc 01Bh 001h B 042h 02Eh -; 1 031h 002h N 04Eh 02Fh -; 2 032h 003h M 04Dh 030h -; 3 033h 004h , 02Ch 031h -; 4 034h 005h . 02Eh 032h -; 5 035h 006h / 02Fh 033h -; 6 036h 007h RShift ---- 034h -; 7 037h 008h \ 05Ch 035h -; 8 038h 009h LCtrl ---- 036h -; 9 039h 00Ah LAlt ---- 037h -; 0 030h 00Bh Space 020h 038h -; - 02Dh 00Ch RAlt ---- 039h -; = 03Dh 00Dh RCtrl ---- 03Ah -; BackSpace 008h 00Eh F1 000h 03Bh -; Tab 009h 00Fh F2 000h 03Ch -; Q 051h 010h F3 000h 03Dh -; W 057h 011h F4 000h 03Eh -; E 045h 012h F5 000h 03Fh -; R 052h 013h F6 000h 040h -; T 054h 014h F7 000h 041h -; Y 059h 015h F8 000h 042h -; U 055h 016h F9 000h 043h -; I 049h 017h F10 000h 044h -; O 04Fh 018h F11 000h 045h -; P 050h 019h F12 000h 046h -; [ 05Bh 01Ah PrScrn ---- 047h -; ] 05Dh 01Bh ScrlLock 000h 048h -; CapsLock 000h 01Ch NumLock 000h 049h -; A 041h 01Dh / 02Fh 04Ah -; S 053h 01Eh * 02Ah 04Bh -; D 044h 01Fh - 02Dh 04Ch -; F 046h 020h + 02Bh 04Dh -; G 047h 021h enter 00Dh 04Eh -; H 048h 022h Del . 000h 04Fh -; J 04Ah 023h Ins 0 000h 050h -; K 04Bh 024h End 1 000h 051h -; L 04Ch 025h Down 2 000h 052h -; ; 03Bh 026h PgDw 3 000h 053h -; ' 027h 027h Left 4 000h 054h -; Enter 00Dh 028h 5 000h 055h -; LShift ---- 029h Right 6 000h 056h -; Z 05Ah 02Ah Home 7 000h 057h -; X 058h 02Bh Up 8 000h 058h -; C 043h 02Ch PgUp 9 000h 059h +; key ASCII/SCAN key ASCII/SCAN +; ` #00 #00 V #56 #2D +; Esc #1B #01 B #42 #2E +; 1 #31 #02 N #4E #2F +; 2 #32 #03 M #4D #30 +; 3 #33 #04 , #2C #31 +; 4 #34 #05 . #2E #32 +; 5 #35 #06 / #2F #33 +; 6 #36 #07 RShift --- #34 +; 7 #37 #08 \ #5C #35 +; 8 #38 #09 LCtrl --- #36 +; 9 #39 #0A LAlt --- #37 +; 0 #30 #0B Space #20 #38 +; - #2D #0C RAlt --- #39 +; = #3D #0D RCtrl --- #3A +; BackSpace #08 #0E F1 #00 #3B +; Tab #09 #0F F2 #00 #3C +; Q #51 #10 F3 #00 #3D +; W #57 #11 F4 #00 #3E +; E #45 #12 F5 #00 #3F +; R #52 #13 F6 #00 #40 +; T #54 #14 F7 #00 #41 +; Y #59 #15 F8 #00 #42 +; U #55 #16 F9 #00 #43 +; I #49 #17 F10 #00 #44 +; O #4F #18 F11 #00 #45 +; P #50 #19 F12 #00 #46 +; [ #5B #1A PrScrn --- #47 +; ] #5D #1B ScrlLock #00 #48 +; CapsLock #00 #1C NumLock #00 #49 +; A #41 #1D / #2F #4A +; S #53 #1E * #2A #4B +; D #44 #1F - #2D #4C +; F #46 #20 + #2B #4D +; G #47 #21 enter #0D #4E +; H #48 #22 Del . #00 #4F +; J #4A #23 Ins 0 #00 #50 +; K #4B #24 End 1 #00 #51 +; L #4C #25 Down 2 #00 #52 +; ; #3B #26 PgDw 3 #00 #53 +; ' #27 #27 Left 4 #00 #54 +; Enter #0D #28 5 #00 #55 +; LShift --- #29 Right 6 #00 #56 +; Z #5A #2A Home 7 #00 #57 +; X #58 #2B Up 8 #00 #58 +; C #43 #2C PgUp 9 #00 #59 ; Приложение В. Байт атрибутов текстового экрана From 2308a92341b8cf17b710c05123feec4d4dc55609 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 28 Oct 2023 00:52:40 +1000 Subject: [PATCH 05/21] ... --- constants/SP2000.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/constants/SP2000.inc b/constants/SP2000.inc index 863b32f..8224f4c 100644 --- a/constants/SP2000.inc +++ b/constants/SP2000.inc @@ -9,9 +9,9 @@ ; Прерывания ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Вектор #FF: -; клавиатура - висит 32 такта. можно проверить по буферу в проце, может наложиться с остальными. -; кадровое - висит 32 такта. Может наложиться с остальными. -; CBL - висит до захвата процем, может наложиться с остальными. +; клавиатура - висит 32 такта. можно проверить по буферу в проце, может наложиться с остальными. +; кадровое - висит 32 такта. Может наложиться с остальными. +; CBL - висит до захвата процем, может наложиться с остальными. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; From a15861c07cab60eaf09c28226d0c7761b4fd8235 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Tue, 31 Oct 2023 02:07:49 +1000 Subject: [PATCH 06/21] ... --- constants/SP2000.inc | 229 ++++++++++++++++++++++++++++++++++++++++++- macroses/macros.z80 | 42 ++++---- 2 files changed, 247 insertions(+), 24 deletions(-) diff --git a/constants/SP2000.inc b/constants/SP2000.inc index 8224f4c..1189674 100644 --- a/constants/SP2000.inc +++ b/constants/SP2000.inc @@ -1899,6 +1899,55 @@ ATA: ; .Master EQU #A0 ; .Slave EQU #B0 ; +; ╔═══════════════════════════════════════════════════════════════╗ +; ║ Как работает схема чтения/записи? ║ +; ║ ║ +; ║ Z80 ┌───┐ ║ +; ║ bus │Buf│ ║ +; ║ ──┬──┤<─>├────────────┬──<─> Low Byte ║ +; ║ │ │ 1 │ │ ║ +; ║ │ ├───┤ ┌───┐ │ ║ +; ║ │ │Buf│ │Reg│ │ ║ +; ║ └──┤──>├──┬──┤──>├──┘ HDD bus ║ +; ║ │ 2 │ │ │ 3 │ ║ +; ║ └───┘ │ └───┘ ║ +; ║ │ ║ +; ║ └────────────<─> High Byte ║ +; ║ ║ +; ║ 1. Чтение всех регистров, кроме регистра данных, A8 = 0 ║ +; ║ Данные с шины HDD через буфер 1 передаются в процессор. ║ +; ║ Только младший байт, старший не нужен. ║ +; ║ ║ +; ║ 2.1 Чтение регистра данных, A8 = 0 ║ +; ║ Данные с шины HDD через буфер 1 передаются в процессор. ║ +; ║ Только младший байт, старший нужен и он защелкивается в ║ +; ║ регистре 3 ║ +; ║ ║ +; ║ 2.2 Чтение регистра данных, A8 = 1 ║ +; ║ Данные из регистра 3 через буфер 1 передаются в процессор. ║ +; ║ - старший байт - HDD в этот момент не выбирается ║ +; ║ ║ +; ║ 3. Запись всех регистров, кроме регистра данных, A8 = 1 ║ +; ║ Данные с шины Z80 через буфер 1 передаются на шину HDD. ║ +; ║ Только младший байт, старший не нужен. ║ +; ║ ║ +; ║ 4.1 Запись регистра данных, A8 = 0 ║ +; ║ Данные с шины Z80 через буфер 2 передаются в регистр 3. ║ +; ║ Только младший байт, старший нужен и он ожидается в следующем ║ +; ║ цикле. HDD в этот момент не выбирается. ║ +; ║ ║ +; ║ 4.2 Запись регистра данных, A8 = 1 ║ +; ║ Данные из регистра 3 передаются на шину HDD - младший байт. ║ +; ║ - старший байт - через буфер 2 передается с процессора ║ +; ║ ║ +; ║ Почему пункт 4.2 отличается от 3, хотя операции по виду ║ +; ║ одинаковы? ║ +; ║ Потому что перед 4.2 всегда идет 4.1, который устанавливает ║ +; ║ тригер WRH в единицу и, таким образом переключает путь ║ +; ║ прохождения байтов. Это и позволяет использовать команды OUTI ║ +; ║ для записи сектора в HDD ║ +; ║ ║ +; ╚═══════════════════════════════════════════════════════════════╝ ENDMODULE ;----------------------------------------------------------------------- @@ -2035,16 +2084,16 @@ REG: ;От количества квадратов длина инта не зависит ; Короче, погнали от M1 и IO. Они вместе в нуле когда прерывание подтвердилось. Ноль на их OR будет только -; при подтверждении прерывания. Ноль уходит телезрителям дальше на AND и оттуда на S, после чего на !Q у +; при подтверждении прерывания. Ноль уходит дальше на AND и оттуда на S, после чего на !Q у ; нас тоже ноль - инт снялся. Если инт снялся и равен 0, то 1 идёт на самый левый триггер в D, но ; переходит на средний триггер только по CTH2 - счётчик длины инта который тикает независимо от того, есть ; он или нет. Когда тикнет, единица переходит дальше на D и ждет опять тика, после чего попадает на AND, а ; там на втором выводе тоже 1, потому что сигналы M1 и IO инверсные и через OR, а вместе в нуле они только ; при подтверждении инта. Единица оттуда втыкается в S, что даёт возможность передать кусок !земли с D на !Q -; при переходе клока с 0 в 1. А такой переход будет только в строке следующего после интового неинтового +; при переходе клока с 0 в 1. А такой переход будет только в строке следующего после интового неинтового ; квадратика с 3 на 4 пиксел. А следующий квадратик с интом после квадратика инта оттягивает генерацию инта ; на себя. Короче, инт генерируется после перехода с квадрата инта на квадрат без инта. Если точнее, то во -; время прорисовки последней линии знакоместа на следующем знакоместе. Два квадрата инта через обычный +; время прорисовки последней линии знакоместа на следующем знакоместе. Два квадрата инта через обычный ; квадрат не смогут повлиять потому что инт либо будет всё ещё висеть и это будет замена 1 на 1))) либо инт ; снимется через IO и M1 установив S в положение ?похер на D и C?, которое сменится только после того как ; протикают левые счётчики. @@ -2053,6 +2102,180 @@ REG: ; ПРО КВАДРАТЫ ИНТА ; ;=======================================================================; +;┌─────────────────────────────┬─────────────────────────────────┐ +;│ Блок-Схема Видеоконтроллера │ ┌───────────────┐ │ +;│ Компьютера Sprinter │ │ RGB Registers ├───> RED │ +;│ (сильно упрощенная) │ │ & Video DACs ├───> GREEN │ +;│ │ │ ├───> BLUE │ +;├─────────────────────────────┘ └──────┬┬───────┘ │ +;│ ┌─┬───┐ ┌───────┐ ││ ┌────┬─────┬────┐ │ +;│ CPU ───┤ │MXA├───┤ Video ├─┼┼─┤MODE│Pixel│PAL ├───╖ │ +;│ Adress ───┤ │ ├───┤ MEM ├─┼┼─┤Reg │Atrib│Reg ├───╢ │ +;│ ├─┤ ├───┤ ├─┼┼─┤ │ Reg │ ├───╢ │ +;│ Y-port ───┤ │ ├───┤ ├─┼┼─┤ │ │ │.. ║ │ +;│ Graf Reg ───┤ │ ├───┤ │ ││ │ │ │ │.. ║ │ +;│ ┌────────────┐ ├─┤ ├───┤ │ ││ │ │ │ │.. ║ │ +;│ │ Mode ├───┤ │ ├───┤ ├─┼┼─┤ │ │ ├───╢ │ +;│ │ Counter ├───┤ │ ├───┤ ├─┴┴─┤ │ │ ├───╢ │ +;│ └────────────┘ ├─┤ ├───┤ │ └─┬┬─┴───┬─┴────┘ ║ │ +;│ ╓── Adress ───┤ │ ├───┤ │ ││ └────────>─╢ │ +;│ ╟── From MODE ───┤ │ ├───┤ │ │└──────────────>─╢ │ +;│ ║ ┌──────────┐ ├─┤ ├───┤ │ └───────────────>─╢ │ +;│ ║ │ Line/Pix ├───┤ │ ├───┤ │ ║ │ +;│ ║ │ Counters ├───┤ │ ├───┤ │ ║ │ +;│ ║ └──────────┘ ├─┤ ├───┤ │ ║ │ +;│ ╟── Pixel/PAL ───┤ │ ├───┤ │ ║ │ +;│ ╟── Registers ───┤ │ ├───┤ │ ║ │ +;│ ║ └─┴───┘ └───────┘ ║ │ +;│ ║ ║ │ +;│ ╚═══════════════════════════════════════════════════════════╝ │ +;├───────────────────────────────────────────────────────────────┤ +;│ Как работает видеоконтроллер? │ +;│ │ +;│ Адрес видеоданных составляет 16 бит │ +;│ Ширина шины данных видео-ОЗУ - 32 бит. │ +;│ Одновременно используются до 3 байт. │ +;│ При графической адресации видео-ОЗУ представляет собой 256 │ +;│ линий по 1024 байта. Линии адресуются через Y-port, а байты в │ +;│ линии 10 младшими битами адреса процессора. │ +;│ В текстовом режиме видео-ОЗУ представляет собой набор из │ +;│ 32-х 8Kb страниц, которые подключаются к первой половине │ +;│ 5-й и 7-й страницы памяти ZX-Spectrum. Номер страницы задается│ +;│ тем же Y-port-ом. Переключение режима адресации производится │ +;│ по номеру страницы ОЗУ. Так, даже если в 5-й спектрумовской │ +;│ странице окажется установлена страница 50h ОЗУ, то видеопамять│ +;│ будет адресоваться как графическая. │ +;│ Текстовая адресация является так же и спектрумовской. │ +;│ Фактически в видео-ОЗУ имеется 32 спектрумовских экрана, из │ +;│ которых реально можно использовать 24, потому что │ +;│ остальные страницы используются для палитры и данных режимов │ +;│ экрана. │ +;│ │ +;│ Экран представляет собой набор знакомест, в которых можно │ +;│ независимо устанавливать режим отображения информации. │ +;│ Каждое знакоместо по размеру соответствует квадрату 8x8 режима│ +;│ 320 точек в линии. Всего на экране 40x32 знакомест. Физически │ +;│ имеется 64x64 знакомест, но часть из них никогда не попадает │ +;│ на экран, а часть находится в области импульсов цинхронизации │ +;│ и гашения луча. В каждом знакоместе можно установить свой │ +;│ режим, вплоть до установки режимов бордера и гашения луча. │ +;│ Основные режимы, устанавливаемые в знакоместах: │ +;│ ZX-40 текстовый режим 40 символов в строке или 1 символ на │ +;│ знакоместо. Он же спектрумовский. │ +;│ ZX-80 текстовый режим 80 символов в строке или 2 символа на │ +;│ знакоместо. │ +;│ GR-256-8 графический режим 320x256 точек, 256 цветов. Он же │ +;│ 8x8 точек 256 цветов на одно знакоместо │ +;│ GR-16-16 графический режим 640x256 точек, 16 цветов. Он же │ +;│ 16x8 точек 16 цветов на одно знакоместо │ +;│ Дополнительные режимы: │ +;│ BORDER знакоместо высвечивается цветом бордера │ +;│ BLANK знакоместо затемнено │ +;│ INT-Mode режим генерации сигнала INT действует только на │ +;│ знакоместах с режимом BLANK и позволяет устанавливать INT │ +;│ в нужное место, вплоть до установки 40 импульсов INT на кадр │ +;│ │ +;│ Тактовая частота - 42MHz Период - 6 однотактовых циклов │ +;│ │ +;│ Циклы распределяются следующим образом: │ +;│ │ +;│ Такт 1 - выборка байта пикселей текстового режима │ +;│ в графическом режиме - холостой ход │ +;│ Такт 2 - выборка байта атрибутов текстового режима │ +;│ он же выборка байта пикселя графического режима │ +;│ Такт 3 - выборка 3-х байт палитры с записью в RGB регистры │ +;│ для режимов 640 точек, в режиме 320 холостой ход │ +;│ Такт 4 - выборка слова режима экрана │ +;│ выборка производится один раз в четыре периода │ +;│ Такт 5 - цикл записи данных от процессора │ +;│ естественно, данные пишутся только когда нужно │ +;│ Такт 6 - выборка 3-х байт палитры с записью в RGB регистры │ +;│ │ +;│ Все начинается с такта 4. Адрес для режима определяется │ +;│ счетчиком вертикали и горизонтали. Считаются 8 точек 320-го │ +;│ режима по вертикали и 8 строк по горизонтали. │ +;│ Режим задается 16 битами, из которых 12 задают адрес квадрата │ +;│ 8x8 байт графического режима. В текстовом режиме эти же биты │ +;│ задают адрес данных экрана, но несколько иначе. │ +;│ Оставшиеся 4 бита режима задают собственно режим. Один бит │ +;│ задает графический или текстовый режим знакоместа. Еще один │ +;│ бит задает режим 320 или 640 точек. Два оставшихся бита в │ +;│ текстовом режиме являются дополнением адреса данных, а в │ +;│ графическом задают одну из 4-х 256-тицветных палитр │ +;│ │ +;│ С пятым тактом все ясно. За исключением того, что для │ +;│ графического и текстового режимов изменяется адресация ОЗУ │ +;│ Изменение задается номером страницы Страницы 50..5F считаются │ +;│ графическим ОЗУ. Следует отметить, что понятие графического и │ +;│ текстового режима адресации не совсем верно отражает суть. │ +;│ Вывод данных в экранное ОЗУ может осуществляться в обоих │ +;│ режимах независимо от действительного режима экрана. │ +;│ │ +;│ 6-й такт. Чтение палитры. В текстовом режиме адрес палитры │ +;│ составляет 10 бит. 8 бит - байт атрибута. 1 бит - пиксель. │ +;│ 1 бит - FLASH. Этот бит фактически переключает две палитры │ +;│ с частотой FLASH. Если палитры для данного атрибута совпадают │ +;│ то FLASH не наблюдается. │ +;│ В графическом режиме адрес палитры составляет 8 бит байта │ +;│ пикселя и 2 бита номера палитры, считанного в 4-м такте, но │ +;│ задержанного на 1 период для синхронного изменения режима │ +;│ и палитры в знакоместе. │ +;│ Еще один бит адреса используется для разделения палитр │ +;│ текстового и графического режимов. Оставшиеся адреса ОЗУ │ +;│ устанавливаются в "1" и вся палитра оказывается на концах │ +;│ 1024-х байтовых линий графического режима. │ +;│ │ +;│ Такт 1. Здесь начинает действовать новый режим, считанный в │ +;│ такте 4. Адрес ОЗУ является адресом байта пикселей текстового │ +;│ режима. Байт пикселей записывается в сдвиговый регистр и │ +;│ первый выдвинутый бит начинает действовать в 6-м такте. │ +;│ │ +;│ Такт 2. Выбирается байт атрибута. Адрес отличается от адреса │ +;│ байта пикселей по известному Спектрумовскому закону. │ +;│ Если перед этим в 4-м такте был считан графический режим, то │ +;│ Адрес атрибута становится другим и соответствует байту пикселя│ +;│ графического режима. Регистр атрибута в графическом режиме │ +;│ является регистром байта пикселя. │ +;│ │ +;│ Такт 3. Чтение палитры для режима 640 точек. Следует заметить │ +;│ что в графическом режим 640 точек, 4 старших бита регистра │ +;│ пикселя маскируются нулями и в этом такте в младших битах │ +;│ адреса оказываются те четыре бита, которые были замаскированы │ +;│ в 6-м такте. Так организуется 16 цветов на точку. │ +;│ │ +;├───────────────────────────────────────────────────────────────┤ +;│ Программирование. │ +;│ 1. Текстовый режим адресации объявляется отмирающим и его │ +;│ использование разрешено только для конфигураций совместимых с │ +;│ ZX-Spectrum. Т.е. Sprinter-1 и AY. (в AY другого и нет) │ +;│ 2. Включение графического режима адресации. │ +;│ Для этого достаточно включить страницу 50..5F в какое либо из │ +;│ окон процессора. │ +;│ Пример: │ +;│ LD A,50h │ +;│ OUT (PAGE3),A │ +;│ После исполнения этих команд окно C000..FFFF будет содержать │ +;│ данные графической памяти (вернее, ее копии в основном ОЗУ) │ +;│ 3. Установка номера линии. │ +;│ Графическое ОЗУ, как уже было сказано, состоит из 256-ти линий│ +;│ по 1024 байт. В окне будет видна только одна линия. Адреса │ +;│ отличающиеся на число кратное 400h физически адресуют одни и │ +;│ те же ячейки памяти. │ +;│ Для изменения номера линии надо вывести номер линии в порт. │ +;│ LD A,40h │ +;│ OUT (Y_port),A │ +;│ После исполнения этих команд с адреса в окне видео-ОЗУ будет │ +;│ находиться 64-я линия экрана (начиная сверху, с 0-й) │ +;│ 4. Каждый квадрат видео-ОЗУ размером 8x8 байт может быть │ +;│ установлен в любое знакоместо. Адрес внутри квадрата есть │ +;│ младшие три бита адреса линии и младшие три бита номера линии.│ +;│ Байты 000..2FFh на линиях являются простыми данными, которые │ +;│ можно использовать для вывода на экран. │ +;│ Байты 300h..3A0h являются байтами режима экрана. │ +;│ Байты 3E0h..3FFh - байты палитр. │ +;│ Адрес квадрата данных, которое выводится в знакоместо задается│ +;│ в байтах режима экрана. │ +;└───────────────────────────────────────────────────────────────┘ ;__________________________________________________________________________________________________________# ; MACRO _mGET_FAT_START slot_num ; .correct EQU (SLOT3 and slot_num)*2 diff --git a/macroses/macros.z80 b/macroses/macros.z80 index 9c8895e..ce455f4 100644 --- a/macroses/macros.z80 +++ b/macroses/macros.z80 @@ -135,30 +135,30 @@ ;======================================= MACRO FRAM_ON IN A,(FastRAM.ON) - IFN NORM_FastRAM - PUSH BC - ;PUSH AF - LD BC,#1FFD - XOR A - OUT (C),A - OUT (FastRAM.SLOT0),A - ;POP AF - POP BC - ENDIF + ; IFN NORM_FastRAM + ; PUSH BC + ; ;PUSH AF + ; LD BC,#1FFD + ; XOR A + ; OUT (C),A + ; OUT (FastRAM.SLOT0),A + ; ;POP AF + ; POP BC + ; ENDIF ENDM MACRO FRAM_OFF IN A,(FastRAM.OFF) - IFN NORM_FastRAM - PUSH BC - ;PUSH AF - LD BC,#1FFD - LD A,1 - OUT (C),A - XOR A - OUT (FastRAM.SLOT0),A - ;POP AF - POP BC - ENDIF + ; IFN NORM_FastRAM + ; PUSH BC + ; ;PUSH AF + ; LD BC,#1FFD + ; LD A,1 + ; OUT (C),A + ; XOR A + ; OUT (FastRAM.SLOT0),A + ; ;POP AF + ; POP BC + ; ENDIF ENDM ;======================================= From 8c5550f810d173790e4665d610328b9247b00f02 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Fri, 3 Nov 2023 02:27:13 +1000 Subject: [PATCH 07/21] ... --- constants/SP2000.inc | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/constants/SP2000.inc b/constants/SP2000.inc index 1189674..3e7bab3 100644 --- a/constants/SP2000.inc +++ b/constants/SP2000.inc @@ -450,8 +450,12 @@ Spec_Page EQU #41 .page_2 EQU #FFF2 .page_3 EQU #FFF3 .RET_addr EQU #FFF4 -.flag_Z EQU #FFFE ; -.flag_X EQU #FFFF ; обозначают, что загружены ROM спектрума +.flag_Z EQU #FFFE +.flag_X EQU #FFFF ; обозначают, что загружены ROM спектрума +.no_zx_rom EQU #38 +.to_bios EQU 8 +.init_acex EQU #E000 ;!TEST +.bitstream_pages EQU .init_acex-(4+1) ;!TEST ;!HARDCODE количество страниц в кэш для бистрима плюс одна ;LD (#FFF3),A ; сохраняем в спецстраницу номер Spec_Page MODE_PAGE EQU #FC ;????? если рудимент, то убрать из резервирования в таблице страниц From 72e3f5cd3723355dfa2aafc460b0f042a75927b2 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 4 Nov 2023 22:13:14 +1000 Subject: [PATCH 08/21] ... --- constants/SP2000.inc | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/constants/SP2000.inc b/constants/SP2000.inc index 3e7bab3..2f6f1dc 100644 --- a/constants/SP2000.inc +++ b/constants/SP2000.inc @@ -567,8 +567,8 @@ SYS_PAGE EQU #FE .TMP_BUFFER EQU #C170; - #C17F .TMP_BUFFER.Size EQU #10 -.RAMD_KEYS EQU #C180 ; RAM-Disks ID's - адрес в SYS_PAGE для каждой буквы рамдиска -.RAMD_KEYS.E EQU #C180 ; по которому хранится его начальный блок памяти +.RAMD_KEYS EQU #C180 ; RAM-Disks ID's - адрес в SYS_PAGE для каждой буквы рамдиска +.RAMD_KEYS.E EQU #C180 ; по которому хранится его начальный блок памяти .RAMD_KEYS.F EQU #C181 .RAMD_KEYS.G EQU #C182 .RAMD_KEYS.H EQU #C183 @@ -584,7 +584,7 @@ SYS_PAGE EQU #FE .RAMD_KEYS.R EQU #C18D .RAMD_KEYS.S EQU #C18E .RAMD_KEYS.T EQU #C18F -.RAMD_KEYS.NUM EQU 16 ; RAMD_KEY_NUM +.RAMD_KEYS.NUM EQU 16 .ZX_PAGES EQU #C190 ; или только один байт - BlockID? ; vROM(10) + vRAM(32-1) + End_Byte(0); одна страница РАМ не считается - это страница 0. ;!TODO EQU #C1BA..#C1BF - 6 bytes @@ -596,9 +596,27 @@ SYS_PAGE EQU #FE ; .FDD_0 EQU #C1E0 .FDD_1 EQU #C1E8 -;!TODO EQU #C1F0..#C1FF -;.FDD_2 EQU #C1F0 -;.FDD_3 EQU #C1F8 +; +; копии рамдисков для переключения между режимами Spectrum / Sprinter +; !TODO воткнуть механизм переключения в функции биоса +.TMP_RAMD_KEYS EQU #C1F0 ; RAM-Disks ID's - адрес в SYS_PAGE для каждой буквы рамдиска +.TMP_RAMD_KEYS.E EQU #C1F0 ; по которому хранится его начальный блок памяти +.TMP_RAMD_KEYS.F EQU #C1F1 +.TMP_RAMD_KEYS.G EQU #C1F2 +.TMP_RAMD_KEYS.H EQU #C1F3 +.TMP_RAMD_KEYS.I EQU #C1F4 +.TMP_RAMD_KEYS.J EQU #C1F5 +.TMP_RAMD_KEYS.K EQU #C1F6 +.TMP_RAMD_KEYS.L EQU #C1F7 +.TMP_RAMD_KEYS.M EQU #C1F8 +.TMP_RAMD_KEYS.N EQU #C1F9 +.TMP_RAMD_KEYS.O EQU #C1FA +.TMP_RAMD_KEYS.P EQU #C1FB +.TMP_RAMD_KEYS.Q EQU #C1FC +.TMP_RAMD_KEYS.R EQU #C1FD +.TMP_RAMD_KEYS.S EQU #C1FE +.TMP_RAMD_KEYS.T EQU #C1FF +.TMP_RAMD_KEYS.NUM EQU .RAMD_KEYS.NUM ; .RAMD_FAT EQU #C200 ; расположение блоков RAM-Disk-ов From 1d2e317669f091fbc5f305013e2110d413f897b0 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 5 Nov 2023 01:14:38 +1000 Subject: [PATCH 09/21] ... --- constants/SP2000.inc | 115 ++++++++++++++++++++++--------------------- 1 file changed, 58 insertions(+), 57 deletions(-) diff --git a/constants/SP2000.inc b/constants/SP2000.inc index 2f6f1dc..feff332 100644 --- a/constants/SP2000.inc +++ b/constants/SP2000.inc @@ -496,7 +496,8 @@ SYS_PAGE EQU #FE .RAM_MSD EQU #C11E ; страница для работы в MS-DOS .MSD_SECS EQU #C11F ; Число секторов в MS-DOS .MSD_NAME EQU #C120 ; Адрес имени найденного файла -;.HDD_WRITE_PROTECT EQU #C122 ; копия содержимого ячейки кмос ;!TODO +;.HDD_WRITE_PROTECT EQU #C122 ; копия содержимого ячейки кмос +.CURRENT_RAM_DRV EQU #C122 ; текущий набор рамдисков для функции SWAP_RAM_DRIVES .INT_ADRESS EQU #C124 ; адрес обработчика прерывания .INT_PAGE EQU #C126 ; страница с обработчиком прерывания .INT_ID EQU #C127 ; если = #AA - значить обработчик установлен @@ -567,59 +568,59 @@ SYS_PAGE EQU #FE .TMP_BUFFER EQU #C170; - #C17F .TMP_BUFFER.Size EQU #10 -.RAMD_KEYS EQU #C180 ; RAM-Disks ID's - адрес в SYS_PAGE для каждой буквы рамдиска -.RAMD_KEYS.E EQU #C180 ; по которому хранится его начальный блок памяти -.RAMD_KEYS.F EQU #C181 -.RAMD_KEYS.G EQU #C182 -.RAMD_KEYS.H EQU #C183 -.RAMD_KEYS.I EQU #C184 -.RAMD_KEYS.J EQU #C185 -.RAMD_KEYS.K EQU #C186 -.RAMD_KEYS.L EQU #C187 -.RAMD_KEYS.M EQU #C188 -.RAMD_KEYS.N EQU #C189 -.RAMD_KEYS.O EQU #C18A -.RAMD_KEYS.P EQU #C18B -.RAMD_KEYS.Q EQU #C18C -.RAMD_KEYS.R EQU #C18D -.RAMD_KEYS.S EQU #C18E -.RAMD_KEYS.T EQU #C18F -.RAMD_KEYS.NUM EQU 16 +.RAMD_KEYS EQU #C180 ; RAM-Disks ID's - адрес в SYS_PAGE для каждой буквы рамдиска +.RAMD_KEYS.E EQU #C180 ; по которому хранится его начальный блок памяти +.RAMD_KEYS.F EQU #C181 +.RAMD_KEYS.G EQU #C182 +.RAMD_KEYS.H EQU #C183 +.RAMD_KEYS.I EQU #C184 +.RAMD_KEYS.J EQU #C185 +.RAMD_KEYS.K EQU #C186 +.RAMD_KEYS.L EQU #C187 +.RAMD_KEYS.M EQU #C188 +.RAMD_KEYS.N EQU #C189 +.RAMD_KEYS.O EQU #C18A +.RAMD_KEYS.P EQU #C18B +.RAMD_KEYS.Q EQU #C18C +.RAMD_KEYS.R EQU #C18D +.RAMD_KEYS.S EQU #C18E +.RAMD_KEYS.T EQU #C18F +.RAMD_KEYS.NUM EQU 16 .ZX_PAGES EQU #C190 ; или только один байт - BlockID? ; vROM(10) + vRAM(32-1) + End_Byte(0); одна страница РАМ не считается - это страница 0. ;!TODO EQU #C1BA..#C1BF - 6 bytes ; -.IDE_0 EQU #C1C0 -.IDE_1 EQU #C1C8 -.IDE_2 EQU #C1D0 -.IDE_3 EQU #C1D8 +.IDE_0 EQU #C1C0 +.IDE_1 EQU #C1C8 +.IDE_2 EQU #C1D0 +.IDE_3 EQU #C1D8 ; -.FDD_0 EQU #C1E0 -.FDD_1 EQU #C1E8 +.FDD_0 EQU #C1E0 +.FDD_1 EQU #C1E8 +.FDD_TBL.Size EQU #10 ; ; копии рамдисков для переключения между режимами Spectrum / Sprinter -; !TODO воткнуть механизм переключения в функции биоса -.TMP_RAMD_KEYS EQU #C1F0 ; RAM-Disks ID's - адрес в SYS_PAGE для каждой буквы рамдиска -.TMP_RAMD_KEYS.E EQU #C1F0 ; по которому хранится его начальный блок памяти -.TMP_RAMD_KEYS.F EQU #C1F1 -.TMP_RAMD_KEYS.G EQU #C1F2 -.TMP_RAMD_KEYS.H EQU #C1F3 -.TMP_RAMD_KEYS.I EQU #C1F4 -.TMP_RAMD_KEYS.J EQU #C1F5 -.TMP_RAMD_KEYS.K EQU #C1F6 -.TMP_RAMD_KEYS.L EQU #C1F7 -.TMP_RAMD_KEYS.M EQU #C1F8 -.TMP_RAMD_KEYS.N EQU #C1F9 -.TMP_RAMD_KEYS.O EQU #C1FA -.TMP_RAMD_KEYS.P EQU #C1FB -.TMP_RAMD_KEYS.Q EQU #C1FC -.TMP_RAMD_KEYS.R EQU #C1FD -.TMP_RAMD_KEYS.S EQU #C1FE -.TMP_RAMD_KEYS.T EQU #C1FF -.TMP_RAMD_KEYS.NUM EQU .RAMD_KEYS.NUM +.Sp_RAMD_KEYS EQU #C1F0 +.Sp_RAMD_KEYS.E EQU #C1F0 +.Sp_RAMD_KEYS.F EQU #C1F1 +.Sp_RAMD_KEYS.G EQU #C1F2 +.Sp_RAMD_KEYS.H EQU #C1F3 +.Sp_RAMD_KEYS.I EQU #C1F4 +.Sp_RAMD_KEYS.J EQU #C1F5 +.Sp_RAMD_KEYS.K EQU #C1F6 +.Sp_RAMD_KEYS.L EQU #C1F7 +.Sp_RAMD_KEYS.M EQU #C1F8 +.Sp_RAMD_KEYS.N EQU #C1F9 +.Sp_RAMD_KEYS.O EQU #C1FA +.Sp_RAMD_KEYS.P EQU #C1FB +.Sp_RAMD_KEYS.Q EQU #C1FC +.Sp_RAMD_KEYS.R EQU #C1FD +.Sp_RAMD_KEYS.S EQU #C1FE +.Sp_RAMD_KEYS.T EQU #C1FF +.Sp_RAMD_KEYS.NUM EQU .RAMD_KEYS.NUM ; -.RAMD_FAT EQU #C200 ; расположение блоков RAM-Disk-ов +.RAMD_FAT EQU #C200 ; RAM Table .MS_BPB EQU #C400 ; буфер BPB .HD_IDF_ADR EQU #C600 ; !FIXIT структурой сделать!!! .HD_IDF_ADR.heads EQU .HD_IDF_ADR+6 @@ -653,18 +654,18 @@ SYS_PAGE EQU #FE ;---------------------------------------------------------------------[] ; -/* - STRUCT FDD_INIT_TABLE -DISK BYTE 0 -F144 EQU FDD_0+0 -SECTORS EQU FDD_0+1 -MS_SECS EQU .SECTORS -HEADS EQU FDD_0+2 -CYLINDL EQU FDD_0+3 -CYLINDH EQU FDD_0+4 -B_P_S EQU FDD_0+5 - ENDS -*/ + +; STRUCT FDD_INIT_TABLE +; DISK BYTE 0 +; F144 EQU FDD_0+0 +; SECTORS EQU FDD_0+1 +; MS_SECS EQU .SECTORS +; HEADS EQU FDD_0+2 +; CYLINDL EQU FDD_0+3 +; CYLINDH EQU FDD_0+4 +; B_P_S EQU FDD_0+5 +; ENDS + ; MODULE FDD_INI_TABLE ; !FIXIT таблицы для FDD устройств 32 байта. привязаться к структуре выше FDD EQU 3 ; ????? хер его знает, что за параметр, разобраться From 866c86ed7b05965f52b41997aab711a32c669cbc Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 5 Nov 2023 01:15:16 +1000 Subject: [PATCH 10/21] ... --- constants/BIOS_equ.inc | 41 ++++++++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 15 deletions(-) diff --git a/constants/BIOS_equ.inc b/constants/BIOS_equ.inc index 6972262..79af2b1 100644 --- a/constants/BIOS_equ.inc +++ b/constants/BIOS_equ.inc @@ -55,21 +55,32 @@ BIOS: ;--------------------------------------- ;[Функции печати и упр. режимом экрана]- -.LP_OPEN_S EQU #80 ; Открытие стандартных окон. -.LP_PRINT_ALL EQU #81 ; Печать символов с атрибутом -.LP_PRINT_SYM EQU #82 ; Вывод символов на экран без атрибута -.LP_PRINT_ATR EQU #83 ; печать атрибутов -.LP_SET_PLACE EQU #84 ; Установка текущего знакоместа в окне -.LP_PRINT_LINE EQU #85 ; Вывод строки символов на экран с текущего знакоместа -.LP_PRINT_LINE2 EQU #86 ; Вывод строки символов на экран без атрибутов -.LP_PRINT_LINE3 EQU #87 ; Вывод строки символов до разделителя -.LP_PRINT_LINE4 EQU #88 ; Вывод строки символов до разделителя, без атрибутов -.LP_CLS_WIN EQU #89 ; Очистка экрана -.LP_SCROLL_UD EQU #8A ; Скроллинг части глобального окна вверх/вниз -.LP_PRINT_LINE5 EQU #8B ; Вывод строки символов на экран до разделителя -.LP_PRINT_LINE6 EQU #8C ; Вывод строки символов на экран до разделителя без атрибутов -.LP_CLS_WIN2 EQU #8D ; Очистка экрана с указанием символа заполнения -.LP_GET_PLACE EQU #8E ; Получить текущее положение вывода на экран +.LP_OPEN_S EQU #80 ; Открытие стандартных окон. +.LP_OPEN_S.ZX_32x24_Default EQU 0 ; спектрумовское окно 32x24 +.LP_OPEN_S.TXT_64x24_Default EQU 1 ; текстовое окно 64x24 +.LP_OPEN_S. +.LP_OPEN_S.TXT_80x32_Default EQU 3 ; текстовое окно 80x32 +.LP_OPEN_S.ZX_32x24 EQU 4 ; спектрумовское окно, HL - положение окна +.LP_OPEN_S.TXT_64x24 EQU 5 ; текстовое окно 64x24, HL - положение окна +.LP_OPEN_S. EQU ; +.LP_OPEN_S.TXT_80x32 EQU 7 ; текстовое окно 80x32, HL - положение окна +.LP_OPEN_S.Graf_0 EQU 8 ; графическое окно 0, HL - положение окна +.LP_OPEN_S.Graf_1 EQU 9 ; графическое окно 1, HL - положение окна + +.LP_PRINT_ALL EQU #81 ; Печать символов с атрибутом +.LP_PRINT_SYM EQU #82 ; Вывод символов на экран без атрибута +.LP_PRINT_ATR EQU #83 ; печать атрибутов +.LP_SET_PLACE EQU #84 ; Установка текущего знакоместа в окне +.LP_PRINT_LINE EQU #85 ; Вывод строки символов на экран с текущего знакоместа +.LP_PRINT_LINE2 EQU #86 ; Вывод строки символов на экран без атрибутов +.LP_PRINT_LINE3 EQU #87 ; Вывод строки символов до разделителя +.LP_PRINT_LINE4 EQU #88 ; Вывод строки символов до разделителя, без атрибутов +.LP_CLS_WIN EQU #89 ; Очистка экрана +.LP_SCROLL_UD EQU #8A ; Скроллинг части глобального окна вверх/вниз +.LP_PRINT_LINE5 EQU #8B ; Вывод строки символов на экран до разделителя +.LP_PRINT_LINE6 EQU #8C ; Вывод строки символов на экран до разделителя без атрибутов +.LP_CLS_WIN2 EQU #8D ; Очистка экрана с указанием символа заполнения +.LP_GET_PLACE EQU #8E ; Получить текущее положение вывода на экран .LP_PR_LINE_DIR EQU #E0 ;!TODO недоделана. Печать "в консоль" до разделителя ;--------------------------------------- From 25576512874a93b4474842df1582a5e79d8df4c3 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 5 Nov 2023 01:20:16 +1000 Subject: [PATCH 11/21] ... --- constants/BIOS_equ.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/constants/BIOS_equ.inc b/constants/BIOS_equ.inc index 79af2b1..df5a48e 100644 --- a/constants/BIOS_equ.inc +++ b/constants/BIOS_equ.inc @@ -58,11 +58,11 @@ BIOS: .LP_OPEN_S EQU #80 ; Открытие стандартных окон. .LP_OPEN_S.ZX_32x24_Default EQU 0 ; спектрумовское окно 32x24 .LP_OPEN_S.TXT_64x24_Default EQU 1 ; текстовое окно 64x24 -.LP_OPEN_S. +.LP_OPEN_S.TXT_40x32_Default EQU 2 ; текстовое окно 40x24 .LP_OPEN_S.TXT_80x32_Default EQU 3 ; текстовое окно 80x32 .LP_OPEN_S.ZX_32x24 EQU 4 ; спектрумовское окно, HL - положение окна .LP_OPEN_S.TXT_64x24 EQU 5 ; текстовое окно 64x24, HL - положение окна -.LP_OPEN_S. EQU ; +.LP_OPEN_S.TXT_40x32 EQU 6 ; текстовое окно 40x32, HL - положение окна .LP_OPEN_S.TXT_80x32 EQU 7 ; текстовое окно 80x32, HL - положение окна .LP_OPEN_S.Graf_0 EQU 8 ; графическое окно 0, HL - положение окна .LP_OPEN_S.Graf_1 EQU 9 ; графическое окно 1, HL - положение окна From a8a109eb8f4ee85e47d65911e8a0f2d2f5b71db1 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 5 Nov 2023 02:23:58 +1000 Subject: [PATCH 12/21] ... --- constants/BIOS_equ.inc | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/constants/BIOS_equ.inc b/constants/BIOS_equ.inc index df5a48e..ca37554 100644 --- a/constants/BIOS_equ.inc +++ b/constants/BIOS_equ.inc @@ -56,16 +56,16 @@ BIOS: ;[Функции печати и упр. режимом экрана]- .LP_OPEN_S EQU #80 ; Открытие стандартных окон. -.LP_OPEN_S.ZX_32x24_Default EQU 0 ; спектрумовское окно 32x24 -.LP_OPEN_S.TXT_64x24_Default EQU 1 ; текстовое окно 64x24 -.LP_OPEN_S.TXT_40x32_Default EQU 2 ; текстовое окно 40x24 -.LP_OPEN_S.TXT_80x32_Default EQU 3 ; текстовое окно 80x32 -.LP_OPEN_S.ZX_32x24 EQU 4 ; спектрумовское окно, HL - положение окна -.LP_OPEN_S.TXT_64x24 EQU 5 ; текстовое окно 64x24, HL - положение окна -.LP_OPEN_S.TXT_40x32 EQU 6 ; текстовое окно 40x32, HL - положение окна -.LP_OPEN_S.TXT_80x32 EQU 7 ; текстовое окно 80x32, HL - положение окна -.LP_OPEN_S.Graf_0 EQU 8 ; графическое окно 0, HL - положение окна -.LP_OPEN_S.Graf_1 EQU 9 ; графическое окно 1, HL - положение окна +.LP_OPEN_S.ZX_32x24_Default EQU #0080 ; спектрумовское окно 32x24 +.LP_OPEN_S.TXT_64x24_Default EQU #0180 ; текстовое окно 64x24 +.LP_OPEN_S.TXT_40x32_Default EQU #0280 ; текстовое окно 40x24 +.LP_OPEN_S.TXT_80x32_Default EQU #0380 ; текстовое окно 80x32 +.LP_OPEN_S.ZX_32x24 EQU #0480 ; спектрумовское окно, HL - положение окна +.LP_OPEN_S.TXT_64x24 EQU #0580 ; текстовое окно 64x24, HL - положение окна +.LP_OPEN_S.TXT_40x32 EQU #0680 ; текстовое окно 40x32, HL - положение окна +.LP_OPEN_S.TXT_80x32 EQU #0780 ; текстовое окно 80x32, HL - положение окна +.LP_OPEN_S.Graf_0 EQU #0880 ; графическое окно 0, HL - положение окна +.LP_OPEN_S.Graf_1 EQU #0980 ; графическое окно 1, HL - положение окна .LP_PRINT_ALL EQU #81 ; Печать символов с атрибутом .LP_PRINT_SYM EQU #82 ; Вывод символов на экран без атрибута From 83a1a1393272ae07c2138cd70d6e2fb6224c2030 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 5 Nov 2023 02:31:36 +1000 Subject: [PATCH 13/21] ... --- constants/BIOS_equ.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/constants/BIOS_equ.inc b/constants/BIOS_equ.inc index ca37554..ca44eac 100644 --- a/constants/BIOS_equ.inc +++ b/constants/BIOS_equ.inc @@ -20,6 +20,7 @@ BIOS: .GetBanksPorts EQU #C6 ; Получение адресов портов окон .GetMemPageNext EQU #C7 ; Получить номер следующей страницы блока по предыдущему № .GET_RAMD_NUM EQU #9B ; Получить номер RAM-Disk-а (0..15) по его block id +.SWAP_RAM_DRIVES EQU #9C ; Cменить набор рамдисков ZX <-> Sp2000 .DivMemBlocks EQU #9D ; Разделение блока .MergeMemBlocks EQU #9E ; Слияние блоков ;--------------------------------------- From 809ea1f0b204f2d56555497c1c808806833d6315 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 5 Nov 2023 02:49:46 +1000 Subject: [PATCH 14/21] ... --- constants/BIOS_equ.inc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/constants/BIOS_equ.inc b/constants/BIOS_equ.inc index ca44eac..6e29805 100644 --- a/constants/BIOS_equ.inc +++ b/constants/BIOS_equ.inc @@ -21,6 +21,9 @@ BIOS: .GetMemPageNext EQU #C7 ; Получить номер следующей страницы блока по предыдущему № .GET_RAMD_NUM EQU #9B ; Получить номер RAM-Disk-а (0..15) по его block id .SWAP_RAM_DRIVES EQU #9C ; Cменить набор рамдисков ZX <-> Sp2000 +.SWAP_RAM_DRIVES.Sp2000 EQU #009C ; Режим рамдисков Sp2000 +.SWAP_RAM_DRIVES.ZX EQU #FF9C ; Режим рамдисков ZX Spectrum mode +.SWAP_RAM_DRIVES.Info EQU #FE9C ; Узнать какой режим РАМ дисков установлен .DivMemBlocks EQU #9D ; Разделение блока .MergeMemBlocks EQU #9E ; Слияние блоков ;--------------------------------------- From cd3cdaff6387047f9d4bbe0edf73a19dc8a65cb3 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Tue, 7 Nov 2023 02:25:00 +1000 Subject: [PATCH 15/21] ... --- constants/SP2000.inc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/constants/SP2000.inc b/constants/SP2000.inc index feff332..f61e7a0 100644 --- a/constants/SP2000.inc +++ b/constants/SP2000.inc @@ -122,6 +122,8 @@ CNF_PORT: .PENT_RESET EQU #20 .SCORP_RESET EQU #40 .CNF_512 EQU #80 ; включение Pentagon 128 +.ZX_BIOS EQU #00 +.ZX_EXTENSION EQU #01 ; прибит в конфе гвоздями на #7C/#3C SYS_PORT: .ON EQU #7C @@ -623,9 +625,9 @@ SYS_PAGE EQU #FE .RAMD_FAT EQU #C200 ; RAM Table .MS_BPB EQU #C400 ; буфер BPB .HD_IDF_ADR EQU #C600 ; !FIXIT структурой сделать!!! +.HD_IDF_ADR.sec_cyl EQU .HD_IDF_ADR+4 .HD_IDF_ADR.heads EQU .HD_IDF_ADR+6 .HD_IDF_ADR.sectors EQU .HD_IDF_ADR+12 -.HD_IDF_ADR.sec_cyl EQU .HD_IDF_ADR+4 .MS_DIR EQU #C800 ; буфер DIR sector .MS_FAT EQU #CC00 ; буфер FAT sector .MS_BUF EQU #D000 ; буфер DAT sector From 4c835d305fd5d1bc296039706d5e163c1f2224ca Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Tue, 7 Nov 2023 03:03:07 +1000 Subject: [PATCH 16/21] ... --- constants/SP2000.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/constants/SP2000.inc b/constants/SP2000.inc index f61e7a0..63623e5 100644 --- a/constants/SP2000.inc +++ b/constants/SP2000.inc @@ -509,7 +509,7 @@ SYS_PAGE EQU #FE .COUNT_FL EQU #C12B ; счетчик файлов в секторе .COUNT_SEC EQU #C12C ; счетчик секторов в каталоге .C_P_B EQU #C12D ; число кластеров на блок ОЗУ -;!TODO EQU #C12E +;!TODO WORD EQU #C12E .FAT_FLAG EQU #C130 ; FAT флаг + FAT sector .MSD_CONT_SEC EQU #C132 ; текущий сектор для MS-DOS .MSD_CONT_SEC2 EQU #C134 @@ -591,7 +591,8 @@ SYS_PAGE EQU #FE .ZX_PAGES EQU #C190 ; или только один байт - BlockID? ; vROM(10) + vRAM(32-1) + End_Byte(0); одна страница РАМ не считается - это страница 0. ;!TODO EQU #C1BA..#C1BF - 6 bytes -; +;.LIB_TABLE EQU #C1A0..#C1BF ; таблицы Library 32 байта + .IDE_0 EQU #C1C0 .IDE_1 EQU #C1C8 .IDE_2 EQU #C1D0 @@ -652,7 +653,6 @@ SYS_PAGE EQU #FE ;.INT_PAGE EQU #C126 ; начальный сектор DAT ;.CLASTER_LEN EQU #C12E ; длина кластера в байтах ;.CMOS_FLAG_1 EQU #C170 -;.LIB_TABLE EQU #C1A0..#C1BF ; таблицы librares 32 байта ;---------------------------------------------------------------------[] ; From f28f23e5762be487322f637d70405945fc3d752c Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Fri, 10 Nov 2023 03:09:40 +1000 Subject: [PATCH 17/21] ... --- constants/dss_equ.inc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/constants/dss_equ.inc b/constants/dss_equ.inc index 536cb47..f2d1d6e 100644 --- a/constants/dss_equ.inc +++ b/constants/dss_equ.inc @@ -18,12 +18,12 @@ CLP_Parameters EQU 1 ; ;--------------------------------------- FAT_ATTR: -.ARCHIVE EQU #20 -.DIRECTORY EQU #10 -.VOLUME_ID EQU #08 -.SYSTEM EQU #04 -.HIDDEN EQU #02 -.READ_ONLY EQU #01 +.ARCHIVE EQU %0010'0000 +.DIRECTORY EQU %0001'0000 +.VOLUME_ID EQU %0000'1000 +.SYSTEM EQU %0000'0100 +.HIDDEN EQU %0000'0010 +.READ_ONLY EQU %0000'0001 .NoDIRnoVolID EQU .READ_ONLY + .HIDDEN + .ARCHIVE + .SYSTEM ; .NoVolID EQU .READ_ONLY + .HIDDEN + .DIRECTORY + .ARCHIVE + .SYSTEM ; .NoSYSnoVolID EQU .READ_ONLY + .HIDDEN + .DIRECTORY + .ARCHIVE ; From e1e72416285ec7354921deb745d6ffc193a78fee Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Fri, 10 Nov 2023 23:00:42 +1000 Subject: [PATCH 18/21] ... --- constants/dss_equ.inc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/constants/dss_equ.inc b/constants/dss_equ.inc index f2d1d6e..a1860e8 100644 --- a/constants/dss_equ.inc +++ b/constants/dss_equ.inc @@ -18,12 +18,12 @@ CLP_Parameters EQU 1 ; ;--------------------------------------- FAT_ATTR: -.ARCHIVE EQU %0010'0000 -.DIRECTORY EQU %0001'0000 -.VOLUME_ID EQU %0000'1000 -.SYSTEM EQU %0000'0100 -.HIDDEN EQU %0000'0010 -.READ_ONLY EQU %0000'0001 +.ARCHIVE EQU %0010'0000 ; bit 5 +.DIRECTORY EQU %0001'0000 ; bit 4 +.VOLUME_ID EQU %0000'1000 ; bit 3 +.SYSTEM EQU %0000'0100 ; bit 2 +.HIDDEN EQU %0000'0010 ; bit 1 +.READ_ONLY EQU %0000'0001 ; bit 0 .NoDIRnoVolID EQU .READ_ONLY + .HIDDEN + .ARCHIVE + .SYSTEM ; .NoVolID EQU .READ_ONLY + .HIDDEN + .DIRECTORY + .ARCHIVE + .SYSTEM ; .NoSYSnoVolID EQU .READ_ONLY + .HIDDEN + .DIRECTORY + .ARCHIVE ; @@ -51,7 +51,7 @@ Dss: ; EQU #0C .ERASE EQU #0D .Delete EQU #0E -.Move EQU #0F +.Move EQU #0F ;!TODO .Rename EQU #10 .Open EQU #11 .Open.RW EQU 0 From 3833984686ab7fcf57295541864f15c175a9c9d9 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Fri, 10 Nov 2023 23:10:09 +1000 Subject: [PATCH 19/21] ... --- constants/dss_equ.inc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/constants/dss_equ.inc b/constants/dss_equ.inc index a1860e8..a714246 100644 --- a/constants/dss_equ.inc +++ b/constants/dss_equ.inc @@ -61,9 +61,9 @@ Dss: .Read EQU #13 .Write EQU #14 .Move_FP EQU #15 -.Move_FP.FrStart EQU 0 -.Move_FP.FrCurrent EQU 1 -.Move_FP.FrEnd EQU 2 +.Move_FP.FrStart EQU 0*256 + .Move_FP +.Move_FP.FrCurrent EQU 1*256 + .Move_FP +.Move_FP.FrEnd EQU 2*256 + .Move_FP .Attrib EQU #16 .Get_D_T EQU #17 From 8641b77d8ebe42ae042bb8df3902300e678048eb Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 11 Nov 2023 00:26:25 +1000 Subject: [PATCH 20/21] ... --- constants/dss_equ.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/constants/dss_equ.inc b/constants/dss_equ.inc index a714246..974455e 100644 --- a/constants/dss_equ.inc +++ b/constants/dss_equ.inc @@ -17,7 +17,7 @@ CLP_Parameters EQU 1 ; ; (CLP_CLLength) + 3 ; начало полного пути до запускаемого приложения (вместе с именем EXE) ;--------------------------------------- -FAT_ATTR: +FAT_ATTR:; .ARCHIVE EQU %0010'0000 ; bit 5 .DIRECTORY EQU %0001'0000 ; bit 4 .VOLUME_ID EQU %0000'1000 ; bit 3 From b69773d50cb2c0e1da44f7f20c7daa32871f2308 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 11 Nov 2023 01:08:47 +1000 Subject: [PATCH 21/21] new numbers for BC --- constants/dss_equ.inc | 46 +++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/constants/dss_equ.inc b/constants/dss_equ.inc index 974455e..9047288 100644 --- a/constants/dss_equ.inc +++ b/constants/dss_equ.inc @@ -17,7 +17,7 @@ CLP_Parameters EQU 1 ; ; (CLP_CLLength) + 3 ; начало полного пути до запускаемого приложения (вместе с именем EXE) ;--------------------------------------- -FAT_ATTR:; +FAT_ATTR: .ARCHIVE EQU %0010'0000 ; bit 5 .DIRECTORY EQU %0001'0000 ; bit 4 .VOLUME_ID EQU %0000'1000 ; bit 3 @@ -42,8 +42,8 @@ Dss: .RescanDrives EQU #08 .BootDSK EQU #09 -.BootDSK.Get EQU 0 -.BootDSK.Set EQU 1 +.BootDSK.Get EQU #00*256 + .BootDSK +.BootDSK.Set EQU #01*256 + .BootDSK ; ; File i/o .Create EQU #0A @@ -61,9 +61,9 @@ Dss: .Read EQU #13 .Write EQU #14 .Move_FP EQU #15 -.Move_FP.FrStart EQU 0*256 + .Move_FP -.Move_FP.FrCurrent EQU 1*256 + .Move_FP -.Move_FP.FrEnd EQU 2*256 + .Move_FP +.Move_FP.FrStart EQU #00*256 + .Move_FP +.Move_FP.FrCurrent EQU #01*256 + .Move_FP +.Move_FP.FrEnd EQU #02*256 + .Move_FP .Attrib EQU #16 .Get_D_T EQU #17 @@ -121,26 +121,26 @@ Dss: .DosName EQU #44 .EX_Path EQU #45 -.EX_Path.GET_ALL EQU 0 ; Разобрать строку -.EX_Path.GET_DRIVE EQU 1 ; Выделить имя диска -.EX_Path.GET_PATH EQU 2 ; Выделить директорию -.EX_Path.GET_NAME EQU 3 ; Выделить имя файла -.EX_Path.GET_TYPE EQU 4 ; Выделить расширение файла -.EX_Path.GET_ALL_EX EQU 5 ; Выделить имя диска, путь к файлу, имя файла и расширение файла -.EX_Path.RESR EQU 6 ; Зарезервировано -.EX_Path.GSWITCH EQU 7 ; Выделить параметр командной строки -.EX_Path.GETNAME EQU 8 ; Преобразовать из 11 символьного формата в формат ДОС -.EX_Path.MASK EQU 9 ; Преобразовать из формата ДОС в 11 символьный формат +.EX_Path.GET_ALL EQU #00*256 + .EX_Path ; Разобрать строку +.EX_Path.GET_DRIVE EQU #01*256 + .EX_Path ; Выделить имя диска +.EX_Path.GET_PATH EQU #02*256 + .EX_Path ; Выделить директорию +.EX_Path.GET_NAME EQU #03*256 + .EX_Path ; Выделить имя файла +.EX_Path.GET_TYPE EQU #04*256 + .EX_Path ; Выделить расширение файла +.EX_Path.GET_ALL_EX EQU #05*256 + .EX_Path ; Выделить имя диска, путь к файлу, имя файла и расширение файла +.EX_Path.RESR EQU #06*256 + .EX_Path ; Зарезервировано +.EX_Path.GSWITCH EQU #07*256 + .EX_Path ; Выделить параметр командной строки +.EX_Path.GETNAME EQU #08*256 + .EX_Path ; Преобразовать из 11 символьного формата в формат ДОС +.EX_Path.MASK EQU #09*256 + .EX_Path ; Преобразовать из формата ДОС в 11 символьный формат .Environ EQU #46 -.Environ.Init EQU #FF -.Environ.Read EQU #0 -.Environ.Get EQU #1 -.Environ.Set EQU #2 +.Environ.Init EQU 255*256 + .Environ +.Environ.Read EQU #00*256 + .Environ +.Environ.Get EQU #01*256 + .Environ +.Environ.Set EQU #02*256 + .Environ .AppInfo EQU #47 -.AppInfo.CMD_Param EQU 0*256 + .AppInfo -.AppInfo.EXE_HomeDir EQU 1*256 + .AppInfo -.AppInfo.EXE_FullPath EQU 2*256 + .AppInfo +.AppInfo.CMD_Param EQU #00*256 + .AppInfo +.AppInfo.EXE_HomeDir EQU #01*256 + .AppInfo +.AppInfo.EXE_FullPath EQU #02*256 + .AppInfo ; EQU #48 ; EQU #49 ; EQU #4A