Fix DD5 and DD22
@ -1,6 +1,7 @@
|
||||
# Компьютер "Океан-240.2"
|
||||
|
||||
Исходные файлы проекта схемы и печатной платы компьютера "Океан-240.2".
|
||||
|
||||
Как использовать:
|
||||
|
||||
В редакторе [EasyEDA](https://easyeda.com/editor), через "File" > "Open" > "EasyEDA Source", и выберите json файл и откройте его.
|
||||
BIN
Export/PCB_TOP_Ocean-240.2_v1.0.3.pdf
Normal file
|
Before Width: | Height: | Size: 486 KiB |
124337
Export/SVG/CPU_v1.0.3.svg
Normal file
|
After Width: | Height: | Size: 2.4 MiB |
|
Before Width: | Height: | Size: 697 KiB |
147066
Export/SVG/DRAM_v1.0.3.svg
Normal file
|
After Width: | Height: | Size: 2.9 MiB |
|
Before Width: | Height: | Size: 910 KiB |
243592
Export/SVG/Interfaces_v1.0.3.svg
Normal file
|
After Width: | Height: | Size: 4.7 MiB |
|
Before Width: | Height: | Size: 328 KiB |
52537
Export/SVG/Power_v1.0.3.svg
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 444 KiB |
112286
Export/SVG/RAM_CTR_v1.0.3.svg
Normal file
|
After Width: | Height: | Size: 2.2 MiB |
|
Before Width: | Height: | Size: 205 KiB |
39249
Export/SVG/Tape_v1.0.3.svg
Normal file
|
After Width: | Height: | Size: 778 KiB |
|
Before Width: | Height: | Size: 329 KiB |
75145
Export/SVG/Video_v1.0.3.svg
Normal file
|
After Width: | Height: | Size: 1.5 MiB |
BIN
Export/Schematic_Ocean-240.2_v1.0.3.pdf
Normal file
BIN
Gerbers/Gerber_Ocean-240.2_v1.0.3.zip
Normal file
1174
KiCAD/CPU.kicad_sch
@ -2767,7 +2767,7 @@
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "Romychs_Logic_TTL:КР1533ЛИ1"
|
||||
(symbol "Romychs_Logic_TTL:КР1533ЛЛ1"
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
@ -2781,7 +2781,7 @@
|
||||
(justify bottom)
|
||||
)
|
||||
)
|
||||
(property "Value" "КР1533ЛИ1"
|
||||
(property "Value" "КР1533ЛЛ1"
|
||||
(at 8.89 -5.842 0)
|
||||
(do_not_autoplace)
|
||||
(effects
|
||||
@ -2792,7 +2792,7 @@
|
||||
)
|
||||
)
|
||||
(property "Footprint" "Romychs_IC_DIP:DIP-14_W7.62mm"
|
||||
(at 8.89 -11.43 0)
|
||||
(at 8.89 -10.922 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
@ -2811,8 +2811,8 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "4x2И"
|
||||
(at 8.89 -9.144 0)
|
||||
(property "Description" "4x2ИЛИ"
|
||||
(at 8.89 -8.89 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
@ -2821,16 +2821,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "ki_keywords" "AND"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(symbol "КР1533ЛИ1_0_0"
|
||||
(symbol "КР1533ЛЛ1_0_0"
|
||||
(rectangle
|
||||
(start 5.08 2.54)
|
||||
(end 12.7 -5.08)
|
||||
@ -2843,19 +2834,18 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "КР1533ЛИ1_0_1"
|
||||
(text "&"
|
||||
(symbol "КР1533ЛЛ1_0_1"
|
||||
(text "1"
|
||||
(at 6.35 0.9017 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 2.159 2.159)
|
||||
(size 2.1717 2.1717)
|
||||
)
|
||||
(justify left top)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "КР1533ЛИ1_1_1"
|
||||
(symbol "КР1533ЛЛ1_1_1"
|
||||
(pin input line
|
||||
(at 0 0 0)
|
||||
(length 5.08)
|
||||
@ -2949,7 +2939,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "КР1533ЛИ1_2_1"
|
||||
(symbol "КР1533ЛЛ1_2_1"
|
||||
(pin input line
|
||||
(at 0 0 0)
|
||||
(length 5.08)
|
||||
@ -3005,7 +2995,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "КР1533ЛИ1_3_1"
|
||||
(symbol "КР1533ЛЛ1_3_1"
|
||||
(pin input line
|
||||
(at 0 0 0)
|
||||
(length 5.08)
|
||||
@ -3061,7 +3051,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "КР1533ЛИ1_4_1"
|
||||
(symbol "КР1533ЛЛ1_4_1"
|
||||
(pin input line
|
||||
(at 0 0 0)
|
||||
(length 5.08)
|
||||
@ -4170,7 +4160,7 @@
|
||||
)
|
||||
(wire
|
||||
(pts
|
||||
(xy 379.73 186.69) (xy 384.81 186.69)
|
||||
(xy 379.73 186.69) (xy 386.08 186.69)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
@ -4480,7 +4470,7 @@
|
||||
)
|
||||
(wire
|
||||
(pts
|
||||
(xy 384.81 186.69) (xy 384.81 156.21)
|
||||
(xy 386.08 186.69) (xy 386.08 156.21)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
@ -4570,7 +4560,7 @@
|
||||
)
|
||||
(wire
|
||||
(pts
|
||||
(xy 384.81 156.21) (xy 360.68 156.21)
|
||||
(xy 386.08 156.21) (xy 360.68 156.21)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
@ -11735,133 +11725,6 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Romychs_Logic_TTL:КР1533ЛИ1")
|
||||
(at 165.1 191.77 0)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "2352ff60-eabd-4f16-8a25-7aca4c6a37bb")
|
||||
(property "Reference" "DD22"
|
||||
(at 173.99 188.468 0)
|
||||
(do_not_autoplace yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify bottom)
|
||||
)
|
||||
)
|
||||
(property "Value" "КР1533ЛИ1"
|
||||
(at 173.99 197.612 0)
|
||||
(do_not_autoplace yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify top)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "Romychs_IC_DIP:DIP-14_W7.62mm"
|
||||
(at 173.99 202.692 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 165.1 191.77 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "4x2И"
|
||||
(at 173.99 200.66 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Supplier" "chipdip"
|
||||
(at 173.99 204.978 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(pin "5"
|
||||
(uuid "beef953b-b203-48c1-b047-c6bb979cb48b")
|
||||
)
|
||||
(pin "4"
|
||||
(uuid "13738bfe-10d0-4af3-ba77-89e7e28c9dcd")
|
||||
)
|
||||
(pin "3"
|
||||
(uuid "aecaf5a8-9adf-46d9-b110-3708db167e9f")
|
||||
)
|
||||
(pin "1"
|
||||
(uuid "f1f40516-9362-488d-946b-af3fa0cade75")
|
||||
)
|
||||
(pin "10"
|
||||
(uuid "b72a2248-03d6-44b5-8629-1c9ca8244d5d")
|
||||
)
|
||||
(pin "7"
|
||||
(uuid "9f82d4e6-98db-49ce-989d-d36408bd6529")
|
||||
)
|
||||
(pin "2"
|
||||
(uuid "d47b8353-6f75-4710-9334-d32fc362eeb4")
|
||||
)
|
||||
(pin "6"
|
||||
(uuid "fb2149a0-41fa-429a-a599-2a5a967e418f")
|
||||
)
|
||||
(pin "12"
|
||||
(uuid "b7c59a0e-a6a5-49fd-92a4-1b5a59c80ef6")
|
||||
)
|
||||
(pin "8"
|
||||
(uuid "6a4b397d-4d18-4b17-9c95-0fb7b5fb48a9")
|
||||
)
|
||||
(pin "13"
|
||||
(uuid "91029628-4b29-4e1a-9f8f-d66938e46a93")
|
||||
)
|
||||
(pin "14"
|
||||
(uuid "2db7afbc-1663-4c37-838f-680f3f8ebbc4")
|
||||
)
|
||||
(pin "9"
|
||||
(uuid "6a5475e5-ecb8-4d23-935c-216197cb821f")
|
||||
)
|
||||
(pin "11"
|
||||
(uuid "52396084-2107-4e07-9b09-e0f137ad666b")
|
||||
)
|
||||
(instances
|
||||
(project ""
|
||||
(path "/50d840bf-8433-46e1-bba7-c2626ea20bd0/0e86c361-786b-4f6d-a57a-b00d3df8633f"
|
||||
(reference "DD22")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
(project "RAM_CTR copy"
|
||||
(path "/ddf6abd7-6a61-436d-8639-0cbed1756aab"
|
||||
(reference "DD?")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "power:GND")
|
||||
(at 302.26 149.86 0)
|
||||
@ -12212,7 +12075,7 @@
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Romychs_Logic_TTL:КР1533ЛИ1")
|
||||
(lib_id "Romychs_Logic_TTL:КР1533ЛЛ1")
|
||||
(at 115.57 200.66 0)
|
||||
(unit 2)
|
||||
(exclude_from_sim no)
|
||||
@ -12220,7 +12083,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "361762eb-ada2-4d2a-86c3-622c8db818c6")
|
||||
(uuid "35c4816a-c0a6-4246-b30b-9e99adb1e84d")
|
||||
(property "Reference" "DD22"
|
||||
(at 124.46 197.358 0)
|
||||
(do_not_autoplace yes)
|
||||
@ -12231,7 +12094,7 @@
|
||||
(justify bottom)
|
||||
)
|
||||
)
|
||||
(property "Value" "КР1533ЛИ1"
|
||||
(property "Value" "КР1533ЛЛ1"
|
||||
(at 124.46 206.502 0)
|
||||
(do_not_autoplace yes)
|
||||
(effects
|
||||
@ -12261,7 +12124,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "4x2И"
|
||||
(property "Description" "4x2ИЛИ"
|
||||
(at 124.46 209.55 0)
|
||||
(effects
|
||||
(font
|
||||
@ -12271,57 +12134,47 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Supplier" "chipdip"
|
||||
(at 124.46 213.868 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(pin "14"
|
||||
(uuid "2854f93b-9725-4dc4-b42f-8cad46a67d3e")
|
||||
)
|
||||
(pin "9"
|
||||
(uuid "a27d51a6-ec3a-4af3-9724-deef10db5bd2")
|
||||
)
|
||||
(pin "12"
|
||||
(uuid "17932c7d-005a-4dfe-b010-915583690b3a")
|
||||
)
|
||||
(pin "7"
|
||||
(uuid "ca3580d2-3d60-48a9-bb3a-f121917808cc")
|
||||
)
|
||||
(pin "4"
|
||||
(uuid "c3f16a45-d2b4-4282-a9e3-ed2fcb9edd00")
|
||||
)
|
||||
(pin "3"
|
||||
(uuid "830201e3-4eaf-4837-959b-8107eb14443d")
|
||||
)
|
||||
(pin "1"
|
||||
(uuid "6976a575-dfa5-49a7-b491-9936db938fe5")
|
||||
)
|
||||
(pin "13"
|
||||
(uuid "961fc20c-7fca-41d0-813a-aec04e9649bd")
|
||||
)
|
||||
(pin "11"
|
||||
(uuid "9f9431ba-ec44-4151-810a-8d4fb59eabaf")
|
||||
(uuid "786ffcc3-e630-4977-8b9c-39508e567b6c")
|
||||
)
|
||||
(pin "2"
|
||||
(uuid "3ff63620-3c3c-4d9d-b46c-928da41dd330")
|
||||
)
|
||||
(pin "10"
|
||||
(uuid "2a283d4a-917f-4b18-8ec9-c9b9083bb934")
|
||||
)
|
||||
(pin "5"
|
||||
(uuid "ae92e0a0-3dd7-4ce9-96e2-22d8e0ff907f")
|
||||
(uuid "08b0338d-e12a-48b5-b195-344b4958a93b")
|
||||
)
|
||||
(pin "8"
|
||||
(uuid "524604fe-9431-4c3a-81b0-18ac7b65c77f")
|
||||
(uuid "3ffc5ca9-32f0-4c13-885b-945a70e26caf")
|
||||
)
|
||||
(pin "11"
|
||||
(uuid "5aa65d2c-ed2f-4b9f-80ba-2cfee1b243a1")
|
||||
)
|
||||
(pin "4"
|
||||
(uuid "0ef3e636-15de-43f8-a605-b28f401689c4")
|
||||
)
|
||||
(pin "10"
|
||||
(uuid "611cabd5-a8a2-4e85-8884-becf74a3d247")
|
||||
)
|
||||
(pin "6"
|
||||
(uuid "cb02d132-2a18-4964-af10-731bd923d076")
|
||||
(uuid "700ab4a5-2fe6-4480-b0f4-f498b1f3d7be")
|
||||
)
|
||||
(pin "5"
|
||||
(uuid "733a242a-adf4-447e-b8e4-013faa1878b7")
|
||||
)
|
||||
(pin "1"
|
||||
(uuid "9416d44b-3400-46b9-92da-dbfdd0923eeb")
|
||||
)
|
||||
(pin "7"
|
||||
(uuid "dcdd8f0f-0156-42f0-83a9-72330b727cb9")
|
||||
)
|
||||
(pin "9"
|
||||
(uuid "472ba99c-dd75-4045-93d0-d0446b2dbec7")
|
||||
)
|
||||
(pin "13"
|
||||
(uuid "7e443a2d-d10a-4c3e-8f90-f7d36f6fdc89")
|
||||
)
|
||||
(pin "14"
|
||||
(uuid "2680b9f7-6706-496c-bc96-41be21d08dd4")
|
||||
)
|
||||
(pin "3"
|
||||
(uuid "966aad22-5435-475a-b6ed-b50e9e36a8ee")
|
||||
)
|
||||
(instances
|
||||
(project ""
|
||||
@ -12330,12 +12183,6 @@
|
||||
(unit 2)
|
||||
)
|
||||
)
|
||||
(project "RAM_CTR copy"
|
||||
(path "/ddf6abd7-6a61-436d-8639-0cbed1756aab"
|
||||
(reference "DD?")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
@ -12529,6 +12376,117 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Romychs_Logic_TTL:КР1533ЛЛ1")
|
||||
(at 339.09 172.72 0)
|
||||
(unit 3)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "4b8607b1-195d-4ca9-baaf-f4fa6fd39ae0")
|
||||
(property "Reference" "DD22"
|
||||
(at 347.98 169.418 0)
|
||||
(do_not_autoplace yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify bottom)
|
||||
)
|
||||
)
|
||||
(property "Value" "КР1533ЛЛ1"
|
||||
(at 347.98 178.562 0)
|
||||
(do_not_autoplace yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify top)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "Romychs_IC_DIP:DIP-14_W7.62mm"
|
||||
(at 347.98 183.642 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 339.09 172.72 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "4x2ИЛИ"
|
||||
(at 347.98 181.61 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(pin "2"
|
||||
(uuid "ad757bed-9b78-4bb5-a229-be61f545e7b3")
|
||||
)
|
||||
(pin "3"
|
||||
(uuid "117643f8-1749-41c2-b573-d39bc601430d")
|
||||
)
|
||||
(pin "11"
|
||||
(uuid "33f86b59-e4c7-4471-be0d-c7b6b061c98e")
|
||||
)
|
||||
(pin "4"
|
||||
(uuid "876cb1a6-3974-4054-bb0a-6e15d6f9b22f")
|
||||
)
|
||||
(pin "8"
|
||||
(uuid "2b21588d-03b1-447b-9fe8-537b1ceb4989")
|
||||
)
|
||||
(pin "12"
|
||||
(uuid "936f7a5d-1150-4854-920b-6f17878b263e")
|
||||
)
|
||||
(pin "9"
|
||||
(uuid "941e648c-eab1-4c17-85db-52b9615a1907")
|
||||
)
|
||||
(pin "6"
|
||||
(uuid "b92b151b-24f8-4313-87f3-7d25d73ceab2")
|
||||
)
|
||||
(pin "7"
|
||||
(uuid "212c8852-e2a9-41d6-a7c6-895eadb89d39")
|
||||
)
|
||||
(pin "5"
|
||||
(uuid "17a6c89c-268f-4b93-86cf-6434dd467d99")
|
||||
)
|
||||
(pin "1"
|
||||
(uuid "7eb5d6d5-4200-46d4-b5bb-948d544585a2")
|
||||
)
|
||||
(pin "14"
|
||||
(uuid "70ec34c3-66a5-43d7-b8dd-09370e0bfe9e")
|
||||
)
|
||||
(pin "10"
|
||||
(uuid "8f1e5c67-218b-49bb-840d-0b2cb8300599")
|
||||
)
|
||||
(pin "13"
|
||||
(uuid "0b595211-836b-4992-96f7-6bd2e344e7cb")
|
||||
)
|
||||
(instances
|
||||
(project ""
|
||||
(path "/50d840bf-8433-46e1-bba7-c2626ea20bd0/0e86c361-786b-4f6d-a57a-b00d3df8633f"
|
||||
(reference "DD22")
|
||||
(unit 3)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "power:VCC")
|
||||
(at 257.81 191.77 0)
|
||||
@ -13435,6 +13393,117 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Romychs_Logic_TTL:КР1533ЛЛ1")
|
||||
(at 165.1 191.77 0)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "7ff7a1cf-6740-4e6e-942e-d9dc54e525d2")
|
||||
(property "Reference" "DD22"
|
||||
(at 173.99 188.468 0)
|
||||
(do_not_autoplace yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify bottom)
|
||||
)
|
||||
)
|
||||
(property "Value" "КР1533ЛЛ1"
|
||||
(at 173.99 197.612 0)
|
||||
(do_not_autoplace yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify top)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "Romychs_IC_DIP:DIP-14_W7.62mm"
|
||||
(at 173.99 202.692 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 165.1 191.77 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "4x2ИЛИ"
|
||||
(at 173.99 200.66 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(pin "11"
|
||||
(uuid "4f1feb1e-d51a-46d4-9dc1-21975d0f6cd9")
|
||||
)
|
||||
(pin "14"
|
||||
(uuid "41503b4e-e016-40e9-aafb-334f49971780")
|
||||
)
|
||||
(pin "6"
|
||||
(uuid "b58303b7-2ae8-4e0e-96e5-db0d4b0318b7")
|
||||
)
|
||||
(pin "9"
|
||||
(uuid "c6d597d9-0611-45f8-ba97-59ac760f042b")
|
||||
)
|
||||
(pin "1"
|
||||
(uuid "64b6c888-0245-4a97-a557-7c301908df98")
|
||||
)
|
||||
(pin "4"
|
||||
(uuid "9effd6ab-6cb8-420a-9aa9-b0fade5a51e3")
|
||||
)
|
||||
(pin "2"
|
||||
(uuid "f0317ea8-72f5-41af-b50c-7a5abdb4604e")
|
||||
)
|
||||
(pin "3"
|
||||
(uuid "6d612f27-eaf9-4509-a893-3cbe9131e4b0")
|
||||
)
|
||||
(pin "5"
|
||||
(uuid "62848fe3-f1a2-4237-8ea9-a3f2afe1996f")
|
||||
)
|
||||
(pin "10"
|
||||
(uuid "74ad2bb6-01c8-4cef-8c22-04b3f26b3e9a")
|
||||
)
|
||||
(pin "7"
|
||||
(uuid "a424e9e8-db9d-4e61-9dbf-f22362b256a1")
|
||||
)
|
||||
(pin "8"
|
||||
(uuid "663c6310-1ea2-47d6-884f-74991264e5f1")
|
||||
)
|
||||
(pin "12"
|
||||
(uuid "5000103e-1e84-4c57-b991-7b55e55b6844")
|
||||
)
|
||||
(pin "13"
|
||||
(uuid "df69908e-e9de-41c3-8b71-1a65dd9e6937")
|
||||
)
|
||||
(instances
|
||||
(project ""
|
||||
(path "/50d840bf-8433-46e1-bba7-c2626ea20bd0/0e86c361-786b-4f6d-a57a-b00d3df8633f"
|
||||
(reference "DD22")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "power:VCC")
|
||||
(at 105.41 153.67 0)
|
||||
@ -14538,133 +14607,6 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Romychs_Logic_TTL:КР1533ЛИ1")
|
||||
(at 339.09 172.72 0)
|
||||
(unit 3)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "e5f35aef-593e-45cf-8124-71d812baf4e7")
|
||||
(property "Reference" "DD22"
|
||||
(at 347.98 169.418 0)
|
||||
(do_not_autoplace yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify bottom)
|
||||
)
|
||||
)
|
||||
(property "Value" "КР1533ЛИ1"
|
||||
(at 347.98 178.562 0)
|
||||
(do_not_autoplace yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(justify top)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "Romychs_IC_DIP:DIP-14_W7.62mm"
|
||||
(at 347.98 183.642 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 339.09 172.72 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "4x2И"
|
||||
(at 347.98 181.61 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Supplier" "chipdip"
|
||||
(at 347.98 185.928 0)
|
||||
(effects
|
||||
(font
|
||||
(face "Input Sans Condensed")
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(pin "13"
|
||||
(uuid "c8d67a90-32b1-4bbc-afe3-77dd7d92a248")
|
||||
)
|
||||
(pin "7"
|
||||
(uuid "13844536-1bd5-4e65-a601-393963f9a252")
|
||||
)
|
||||
(pin "2"
|
||||
(uuid "d651f814-479f-4b9a-802e-ccd051b33fc3")
|
||||
)
|
||||
(pin "12"
|
||||
(uuid "6d5adc1f-14be-4c15-9323-ab1bcaea2ec4")
|
||||
)
|
||||
(pin "8"
|
||||
(uuid "478aff60-9b4b-42af-bf06-6834e17b7094")
|
||||
)
|
||||
(pin "5"
|
||||
(uuid "52617b09-ee09-463f-87a5-a6a856a9cdaf")
|
||||
)
|
||||
(pin "11"
|
||||
(uuid "892853e1-b4eb-4da4-85e4-e944c4edc671")
|
||||
)
|
||||
(pin "3"
|
||||
(uuid "9b51c887-555a-45a4-aa8a-93f7a71be1c2")
|
||||
)
|
||||
(pin "6"
|
||||
(uuid "07d01ca3-637d-4f1c-b120-9f29f3b44200")
|
||||
)
|
||||
(pin "1"
|
||||
(uuid "27039415-7477-478a-8c43-bb38ba634d52")
|
||||
)
|
||||
(pin "10"
|
||||
(uuid "028da61b-275f-4275-b43f-8263591c695b")
|
||||
)
|
||||
(pin "4"
|
||||
(uuid "f333649d-d254-409c-aae4-523469529f39")
|
||||
)
|
||||
(pin "14"
|
||||
(uuid "07b5938d-c722-4bbb-8bde-01195c63c0df")
|
||||
)
|
||||
(pin "9"
|
||||
(uuid "a14b9745-a1c4-4f24-82d8-9d123a1a775a")
|
||||
)
|
||||
(instances
|
||||
(project ""
|
||||
(path "/50d840bf-8433-46e1-bba7-c2626ea20bd0/0e86c361-786b-4f6d-a57a-b00d3df8633f"
|
||||
(reference "DD22")
|
||||
(unit 3)
|
||||
)
|
||||
)
|
||||
(project "RAM_CTR copy"
|
||||
(path "/ddf6abd7-6a61-436d-8639-0cbed1756aab"
|
||||
(reference "DD?")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Romychs_Logic_TTL:КР1533КП12")
|
||||
(at 246.38 114.3 0)
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
# Океан-240.2 Персональный компьютер
|
||||
|
||||
Схема и печатная плата в KiCAD v9.0
|
||||
Схема и печатная плата в [KiCAD](https://www.kicad.org/) v9.0
|
||||
|
||||

|
||||
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 117 KiB |
147743
KiCAD/Океан-240.2.kicad_pcb
@ -1,6 +1,6 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 0,
|
||||
"active_layer": 17,
|
||||
"active_layer_preset": "",
|
||||
"auto_track_width": true,
|
||||
"hidden_netclasses": [],
|
||||
@ -20,7 +20,7 @@
|
||||
"footprints": true,
|
||||
"graphics": true,
|
||||
"keepouts": true,
|
||||
"lockedItems": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pads": true,
|
||||
"text": true,
|
||||
@ -49,7 +49,7 @@
|
||||
"conflict_shadows",
|
||||
"shapes"
|
||||
],
|
||||
"visible_layers": "ffffffff_ffffffff_fffffff7_7ffdffff",
|
||||
"visible_layers": "ffffffff_ffffffff_fffffff7_7fffffff",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"git": {
|
||||
|
||||
@ -519,14 +519,14 @@
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "",
|
||||
"plot": "/home/roma/1.0.3/",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
"page_layout_descr_file": "kicad-embed://gost_landscape.kicad_wks"
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
@ -666,7 +666,7 @@
|
||||
},
|
||||
"net_format_name": "",
|
||||
"page_layout_descr_file": "kicad-embed://gost_landscape.kicad_wks",
|
||||
"plot_directory": "",
|
||||
"plot_directory": "/home/roma/1.0.3/",
|
||||
"space_save_all_events": true,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
|
||||
@ -38,4 +38,6 @@ __Программное обеспечение:__ монитор с графи
|
||||
|
||||
## Изменения
|
||||
- В версии v1.0.1, Дизассемблированы обе микросхемы ПЗУ, на основе информации из полученных исходников, немного скорректирована схема и печатная плата.
|
||||
- В версии v1.0.2, Микросхемы DD5 и DD22 на схемах и шелке KiCAD, ошибочно отмечены как ЛИ1. Ошибку заметил при сборке *felix*.
|
||||
- В версии v1.0.3, Исправлены ошибки предыдущей версии. Документация в папке Export и герберы сгенерированы в KiCAD. Версия EasyEDA больше не будет дорабатываться.
|
||||
|
||||
|
||||
11
ROMs/Sources/ROM-FDC/.gitignore
vendored
@ -1,11 +0,0 @@
|
||||
*.labels
|
||||
*.obj
|
||||
*.OBJ
|
||||
*.bin
|
||||
*.BIN
|
||||
*.tmp
|
||||
tmp/
|
||||
build/
|
||||
*.lst
|
||||
*.sld
|
||||
|
||||
9
ROMs/Sources/ROM-FDC/.vscode/extensions.json
vendored
@ -1,9 +0,0 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"maziac.asm-code-lens",
|
||||
"maziac.dezog",
|
||||
"maziac.hex-hover-converter",
|
||||
"maziac.z80-instruction-set",
|
||||
"maziac.sna-fileviewer"
|
||||
]
|
||||
}
|
||||
94
ROMs/Sources/ROM-FDC/.vscode/launch.json
vendored
@ -1,94 +0,0 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "dezog",
|
||||
"request": "launch",
|
||||
"name": "Internal Simulator",
|
||||
"remoteType": "zsim",
|
||||
"zsim": {
|
||||
"visualMemory": true,
|
||||
"memoryModel": "CUSTOM",
|
||||
"customMemory": {
|
||||
"slots": [
|
||||
{
|
||||
"name": "PAGE0",
|
||||
"range": ["0x0000","0x3FFF"],
|
||||
"banks": [{"index": [0, 255]}],
|
||||
"initialBank": 0
|
||||
},
|
||||
{
|
||||
"name": "PAGE1",
|
||||
"range": ["0x4000","0x7FFF"],
|
||||
"banks": [{"index": [0, 255]}],
|
||||
"initialBank": 1
|
||||
},
|
||||
{
|
||||
"name": "PAGE2",
|
||||
"range": ["0x8000","0xBFFF"],
|
||||
"banks": [{"index": [0, 255]}],
|
||||
"initialBank": 2
|
||||
},
|
||||
{
|
||||
"name": "PAGE3",
|
||||
"range": ["0xC000","0xFFFF"],
|
||||
"banks": [{"index": [0, 255]}],
|
||||
"initialBank": 3
|
||||
}
|
||||
],
|
||||
"ioMmu": [
|
||||
"if (portAddress == 0x82) {",
|
||||
" bank = portValue;",
|
||||
" PAGE0 = bank;",
|
||||
"}",
|
||||
"if (portAddress == 0xA2) {",
|
||||
" bank = portValue;",
|
||||
" PAGE1 = bank;",
|
||||
"}",
|
||||
"if (portAddress == 0xC2) {",
|
||||
" bank = portValue;",
|
||||
" PAGE2 = bank;",
|
||||
"}",
|
||||
"if (portAddress == 0xE2) {",
|
||||
" bank = portValue;",
|
||||
" PAGE3 = bank;",
|
||||
"}"
|
||||
]
|
||||
},
|
||||
"customCode": {
|
||||
"debug": false,
|
||||
"jsPath": "sim/ports.js"
|
||||
//"uiPath": "simulation/ui.html"
|
||||
},
|
||||
//"ulaScreen": true,
|
||||
//"zxBorderWidth": 20,
|
||||
//"vsyncInterrupt": true,
|
||||
//"zxKeyboard": true,
|
||||
//"zxBeeper": true
|
||||
},
|
||||
"sjasmplus": [
|
||||
{
|
||||
"path": "turbo_mon.sld"
|
||||
}
|
||||
],
|
||||
"history": {
|
||||
"reverseDebugInstructionCount": 1000000,
|
||||
"spotCount": 10,
|
||||
"codeCoverageEnabled": true
|
||||
},
|
||||
"startAutomatically": false,
|
||||
"commandsAfterLaunch": [],
|
||||
"rootFolder": "${workspaceFolder}",
|
||||
"topOfStack": "STACK_TOP",
|
||||
"loadObjs": [
|
||||
{
|
||||
"path": "turbo_mon.obj",
|
||||
"start": "0xe000"
|
||||
}
|
||||
],
|
||||
"execAddress": "0xe000",
|
||||
"smallValuesMaximum": 513,
|
||||
"tmpDir": ".tmp"
|
||||
}
|
||||
]
|
||||
}
|
||||
170
ROMs/Sources/ROM-FDC/.vscode/tasks.json
vendored
@ -1,170 +0,0 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "make T-MONITOR (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=turbo_mon.sld",
|
||||
"--sym=turbo_mon.labels",
|
||||
"--raw=turbo_mon.obj",
|
||||
"--fullpath",
|
||||
"turbo_mon.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "make BDOS (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=bdos.sld",
|
||||
"--sym=bdos.labels",
|
||||
"--raw=bdos.obj",
|
||||
"--fullpath",
|
||||
"bdos.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "make BIOS (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=bios.sld",
|
||||
"--sym=bios.labels",
|
||||
"--raw=bios.obj",
|
||||
"--fullpath",
|
||||
"bios.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": false
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"label": "make CCP_RAM (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=ccp_ram.sld",
|
||||
"--sym=ccp_ram.labels",
|
||||
"--raw=ccp_ram.obj",
|
||||
"--fullpath",
|
||||
"ccp_ram.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "make CCP_ROM (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=ccp_rom.sld",
|
||||
"--sym=ccp_rom.labels",
|
||||
"--raw=ccp_rom.obj",
|
||||
"--fullpath",
|
||||
"ccp_rom.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": false
|
||||
}
|
||||
},
|
||||
|
||||
{
|
||||
"label": "make CPM (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=cpm.sld",
|
||||
"--sym=cpm.labels",
|
||||
"--raw=cpm.obj",
|
||||
"--fullpath",
|
||||
"cpm.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
}
|
||||
|
||||
]
|
||||
}
|
||||
@ -1,17 +0,0 @@
|
||||
# Ocean-240.2 ROM Sources
|
||||
|
||||
Source codes for personal computer Ocean-240.2 ROM (Z80 mnemonics, but limited for i8080 instruction set).
|
||||
|
||||
This version for Ocean-240.2 with Floppy controller.
|
||||
|
||||
1) 0xC000..0xDFFF - CP/M v2.2
|
||||
Compile:
|
||||
sjasmplus --sld=cpm.sld --sym=cpm.labels --raw=cpm.obj --fullpath cpm.asm
|
||||
|
||||
|
||||
2) 0xE000..0xFFFF - HW Monitor and Turbo Monitor
|
||||
Compile:
|
||||
sjasmplus --sld=turbo_mon.sld --sym=turbo_mon.labels --raw=turbo_mon.obj --fullpath turbo_mon.asm
|
||||
|
||||
|
||||
To compile sources, use [sjasmplus Z80 assembler](https://github.com/z00m128/sjasmplus).
|
||||
@ -1,24 +0,0 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
; CP/M BDOS Entries to build other depended modules
|
||||
;
|
||||
; By Romych 2025-09-09
|
||||
; ======================================================
|
||||
|
||||
IFNDEF _BDOS
|
||||
DEFINE _BDOS
|
||||
|
||||
MODULE BDOS
|
||||
|
||||
bdos_enter EQU 0xba06
|
||||
bdos_compcol EQU 0xba09
|
||||
bdos_strtcol EQU 0xba0a
|
||||
bdos_column EQU 0xba0b
|
||||
bdos_listcp EQU 0xba0c
|
||||
bdos_kbchar EQU 0xba0d
|
||||
|
||||
bdos_entrance EQU 0xc811
|
||||
|
||||
ENDMODULE
|
||||
|
||||
ENDIF
|
||||
@ -1,601 +0,0 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
;
|
||||
; CP/M BIOS
|
||||
;
|
||||
; Disassembled by Romych 2025-09-09
|
||||
; =======================================================
|
||||
|
||||
INCLUDE "equates.inc"
|
||||
INCLUDE "external_ram.inc"
|
||||
INCLUDE "mon_entries.inc"
|
||||
|
||||
IFNDEF BUILD_ROM
|
||||
OUTPUT bios.bin
|
||||
ENDIF
|
||||
|
||||
MODULE BIOS
|
||||
|
||||
ORG 0xD600
|
||||
|
||||
; -------------------------------------------------------
|
||||
; BIOS JUMP TABLE
|
||||
; -------------------------------------------------------
|
||||
boot_f: JP bios_boot
|
||||
wboot_f: JP bios_wboot
|
||||
|
||||
; -------------------------------------------------------
|
||||
; console status to reg-a
|
||||
; -------------------------------------------------------
|
||||
const_f: JP MON_ENTRY.non_con_status
|
||||
|
||||
; -------------------------------------------------------
|
||||
; console character to reg-a
|
||||
; -------------------------------------------------------
|
||||
conin_f: JP MON_ENTRY.mon_con_in
|
||||
|
||||
; -------------------------------------------------------
|
||||
; console character from c to console out
|
||||
; -------------------------------------------------------
|
||||
conout_f: JP MON_ENTRY.mon_con_out
|
||||
|
||||
; -------------------------------------------------------
|
||||
; list device out
|
||||
; -------------------------------------------------------
|
||||
list_f: JP MON_ENTRY.mon_char_print
|
||||
|
||||
; -------------------------------------------------------
|
||||
; punch device out
|
||||
; -------------------------------------------------------
|
||||
punch_f: JP MON_ENTRY.mpn_serial_out
|
||||
|
||||
; -------------------------------------------------------
|
||||
; reader character in to reg-a
|
||||
; -------------------------------------------------------
|
||||
reader_f: JP MON_ENTRY.mon_serial_in
|
||||
|
||||
; -------------------------------------------------------
|
||||
; move to home position, treat as track 00 seek
|
||||
; -------------------------------------------------------
|
||||
home_f: JP home
|
||||
|
||||
; -------------------------------------------------------
|
||||
; select disk given by register c
|
||||
; -------------------------------------------------------
|
||||
seldsk_f: JP seldsk
|
||||
settrk_f: JP settrk
|
||||
setsec_f: JP setsec
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Set DMA address from BC
|
||||
; -------------------------------------------------------
|
||||
setdma_f: JP setdma
|
||||
read_f: JP read
|
||||
write_f: JP write
|
||||
listst_f: JP listst
|
||||
sectran_f: JP sectran
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Reserved
|
||||
; -------------------------------------------------------
|
||||
JP EXT_RAM.JP_WBOOT
|
||||
JP EXT_RAM.JP_WBOOT
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Tape read
|
||||
; -------------------------------------------------------
|
||||
tape_read_f: JP MON_ENTRY.mon_tape_read
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Tape write
|
||||
; -------------------------------------------------------
|
||||
tape_write_f: JP MON_ENTRY.mon_tape_write
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Tape wait block
|
||||
; -------------------------------------------------------
|
||||
tape_wait_f: JP MON_ENTRY.mon_tape_wait
|
||||
|
||||
; -------------------------------------------------------
|
||||
; cold start
|
||||
; -------------------------------------------------------
|
||||
bios_boot:
|
||||
LD HL, (EXT_RAM.BDOS_ENT_ADDR)
|
||||
LD DE, 0x45fa
|
||||
ADD HL, DE
|
||||
LD A, H
|
||||
OR L
|
||||
JP Z, bios_signon
|
||||
LD HL, 0x80
|
||||
LD B, 0x80
|
||||
boot_l1:
|
||||
|
||||
LD (HL), EMPTY
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, boot_l1
|
||||
LD HL, 0x80
|
||||
LD DE, 0x0
|
||||
LD B, 0x8
|
||||
|
||||
boot_l2:
|
||||
PUSH BC
|
||||
CALL MON_ENTRY.ram_disk_write
|
||||
POP BC
|
||||
INC DE
|
||||
DEC B
|
||||
JP NZ, boot_l2
|
||||
XOR A
|
||||
LD (EXT_RAM.cur_user_no), A
|
||||
|
||||
bios_signon:
|
||||
LD SP, 0x100
|
||||
LD HL, msg_hello ;= 1Bh
|
||||
CALL print_strz
|
||||
|
||||
; -------------------------------------------------------
|
||||
; warm start
|
||||
; -------------------------------------------------------
|
||||
bios_wboot:
|
||||
LD SP, 0x100
|
||||
LD HL, CCP_DST_ADDR
|
||||
LD DE, CCP_SRC_ADDR
|
||||
LD BC, CCP_SIZE
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Move CPP from 0xC000 to 0xB200
|
||||
; -------------------------------------------------------
|
||||
wb_move_cpp:
|
||||
LD A, (DE)
|
||||
LD (HL), A
|
||||
INC DE
|
||||
INC HL
|
||||
DEC BC
|
||||
LD A, B
|
||||
OR C
|
||||
JP NZ, wb_move_cpp
|
||||
; Clear tail bytes with 00
|
||||
LD HL, TM_VARS.bdos_compcol
|
||||
LD BC, 213
|
||||
|
||||
wb_clr_ba09:
|
||||
LD (HL), 0x0
|
||||
INC HL
|
||||
DEC BC
|
||||
LD A, B
|
||||
OR C
|
||||
JP NZ,wb_clr_ba09
|
||||
LD A, 0xe5
|
||||
LD (TM_VARS.bdos_efcb), A
|
||||
LD A, 0x80
|
||||
LD (TM_VARS.bdos_dmaad), A
|
||||
LD HL, TM_VARS.DPH_base
|
||||
; Move DPH
|
||||
LD DE,dph
|
||||
LD BC, 78
|
||||
wb_mv_dph_next:
|
||||
LD A, (DE)
|
||||
LD (HL), A
|
||||
INC HL
|
||||
INC DE
|
||||
DEC BC
|
||||
LD A, B
|
||||
OR C
|
||||
JP NZ,wb_mv_dph_next
|
||||
|
||||
LD BC, 0x80 ; DMA default buffer addr
|
||||
CALL setdma_f
|
||||
LD A, JP_OPCODE ; JP
|
||||
LD (EXT_RAM.JP_WBOOT), A
|
||||
LD HL,wboot_f
|
||||
LD (EXT_RAM.wboot_addr), HL
|
||||
LD (EXT_RAM.jp_bdos_enter), A
|
||||
LD HL, CCP_RAM.BDOS_ENTER_JUMP
|
||||
LD (EXT_RAM.BDOS_ENT_ADDR), HL
|
||||
XOR A
|
||||
LD (TM_VARS.slicer_has_data), A
|
||||
LD (TM_VARS.slicer_uninited_count), A
|
||||
LD A, (EXT_RAM.cur_user_no)
|
||||
LD C, A
|
||||
JP CCP_DST_ADDR
|
||||
|
||||
|
||||
listst:
|
||||
XOR A
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Select disk given by register c
|
||||
; -------------------------------------------------------
|
||||
seldsk:
|
||||
LD A, C
|
||||
LD (TM_VARS.cur_disk), A
|
||||
OR A
|
||||
JP Z,sd_no_chnged
|
||||
LD A, E ; bit 0 is set if disk already selected
|
||||
AND 0x1
|
||||
JP NZ,sd_no_chnged
|
||||
|
||||
; -------------------------------------------------------
|
||||
; reread disk
|
||||
; -------------------------------------------------------
|
||||
LD (TM_VARS.slicer_has_data), A
|
||||
LD (TM_VARS.slicer_uninited_count), A
|
||||
; calc DPH address
|
||||
sd_no_chnged:
|
||||
LD L, C
|
||||
LD H, 0x0
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
LD DE, TM_VARS.DPH_base
|
||||
ADD HL, DE
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; move to track 00
|
||||
; -------------------------------------------------------
|
||||
home:
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
OR A
|
||||
JP Z,ho_no_chg
|
||||
LD A, (TM_VARS.slicer_need_save)
|
||||
OR A
|
||||
JP NZ,ho_no_chg
|
||||
LD (TM_VARS.slicer_has_data), A
|
||||
ho_no_chg:
|
||||
LD C, 0x0
|
||||
|
||||
; -------------------------------------------------------
|
||||
; set track address (0,...76) for subsequent read/write
|
||||
; -------------------------------------------------------
|
||||
settrk:
|
||||
LD HL, TM_VARS.curr_track
|
||||
LD (HL), C
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; set sector address (1,..., 26) for subsequent read/write
|
||||
; -------------------------------------------------------
|
||||
setsec:
|
||||
LD HL, TM_VARS.curr_sec
|
||||
LD (HL), C
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; set subsequent dma address (initially 80h)
|
||||
; -------------------------------------------------------
|
||||
setdma:
|
||||
LD L, C
|
||||
LD H, B
|
||||
LD (TM_VARS.dma_addr), HL
|
||||
RET
|
||||
sectran:
|
||||
LD L, C
|
||||
LD H, B
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; read track/sector to preset dma address
|
||||
; -------------------------------------------------------
|
||||
read:
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
OR A
|
||||
JP NZ,read_phys ; for physical disk use special routine
|
||||
CALL ram_disk_calc_addr
|
||||
CALL MON_ENTRY.ram_disk_read
|
||||
XOR A
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; write track/sector from preset dma address
|
||||
; -------------------------------------------------------
|
||||
write:
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
OR A
|
||||
JP NZ,write_phys
|
||||
CALL ram_disk_calc_addr
|
||||
CALL MON_ENTRY.ram_disk_write
|
||||
XOR A
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Calculate address for current sector and track
|
||||
; -------------------------------------------------------
|
||||
ram_disk_calc_addr:
|
||||
LD HL, TM_VARS.curr_track
|
||||
; HL = cur_track * 16
|
||||
LD L, (HL)
|
||||
LD H, 0x0
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
; DE = HL + cur_sec
|
||||
EX DE, HL
|
||||
LD HL, TM_VARS.curr_sec
|
||||
LD L, (HL)
|
||||
LD H, 0x0
|
||||
ADD HL, DE
|
||||
EX DE, HL
|
||||
; store address
|
||||
LD HL, (TM_VARS.dma_addr)
|
||||
RET
|
||||
|
||||
read_phys:
|
||||
CALL read_phys_op
|
||||
RET
|
||||
|
||||
write_phys:
|
||||
CALL write_phys_op
|
||||
RET
|
||||
|
||||
read_phys_op:
|
||||
XOR A
|
||||
; reset counter
|
||||
LD (TM_VARS.slicer_uninited_count), A
|
||||
LD A, 0x1
|
||||
LD (TM_VARS.tmp_slicer_operation), A ; 0 - write; 1 - read
|
||||
LD (TM_VARS.tmp_slicer_can_read), A ; enable read fron disk
|
||||
LD A, 0x2
|
||||
LD (TM_VARS.tmp_slicer_flush), A ; disable flush data to disk
|
||||
JP base_read_write
|
||||
|
||||
write_phys_op:
|
||||
XOR A
|
||||
LD (TM_VARS.tmp_slicer_operation), A
|
||||
LD A, C
|
||||
LD (TM_VARS.tmp_slicer_flush), A
|
||||
CP 0x2
|
||||
JP NZ, LAB_ram_d7a0
|
||||
LD A, 0x10 ; 2048/128
|
||||
LD (TM_VARS.slicer_uninited_count), A
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
LD (TM_VARS.slicer_uninited_disk), A
|
||||
LD A, (TM_VARS.curr_track)
|
||||
LD (TM_VARS.slicer_uninited_track), A
|
||||
LD A, (TM_VARS.curr_sec)
|
||||
LD (TM_VARS.slicer_uninited_sector_128), A
|
||||
LAB_ram_d7a0:
|
||||
LD A, (TM_VARS.slicer_uninited_count)
|
||||
OR A
|
||||
JP Z,slicer_read_write
|
||||
DEC A
|
||||
LD (TM_VARS.slicer_uninited_count), A
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
LD HL, TM_VARS.slicer_uninited_disk
|
||||
CP (HL)
|
||||
JP NZ,slicer_read_write
|
||||
LD A, (TM_VARS.curr_track)
|
||||
LD HL, TM_VARS.slicer_uninited_track
|
||||
CP (HL)
|
||||
JP NZ,slicer_read_write
|
||||
LD A, (TM_VARS.curr_sec)
|
||||
LD HL, TM_VARS.slicer_uninited_sector_128
|
||||
CP (HL)
|
||||
JP NZ,slicer_read_write
|
||||
INC (HL)
|
||||
LD A, (HL)
|
||||
CP 36 ; Sectors per track
|
||||
JP C,wpo_no_inc_track
|
||||
LD (HL), 0x0
|
||||
LD A, (TM_VARS.slicer_uninited_track)
|
||||
INC A
|
||||
LD (TM_VARS.slicer_uninited_track), A
|
||||
|
||||
wpo_no_inc_track:
|
||||
XOR A
|
||||
LD (TM_VARS.tmp_slicer_can_read), A
|
||||
JP base_read_write
|
||||
|
||||
slicer_read_write:
|
||||
XOR A
|
||||
LD (TM_VARS.slicer_uninited_count), A
|
||||
INC A
|
||||
LD (TM_VARS.tmp_slicer_can_read), A
|
||||
|
||||
base_read_write:
|
||||
XOR A
|
||||
LD (TM_VARS.tmp_slicer_result), A
|
||||
LD A, (TM_VARS.curr_sec)
|
||||
OR A
|
||||
RRA
|
||||
OR A
|
||||
RRA
|
||||
LD (TM_VARS.tmp_slicer_real_sector), A
|
||||
LD HL, TM_VARS.slicer_has_data
|
||||
LD A, (HL)
|
||||
LD (HL), 0x1
|
||||
OR A
|
||||
JP Z, LAB_ram_d825
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
LD HL, TM_VARS.slicer_disk
|
||||
CP (HL)
|
||||
JP NZ, LAB_ram_d81e
|
||||
LD A, (TM_VARS.curr_track)
|
||||
LD HL, TM_VARS.slicer_track
|
||||
CP (HL)
|
||||
JP NZ, LAB_ram_d81e
|
||||
LD A, (TM_VARS.tmp_slicer_real_sector)
|
||||
LD HL, TM_VARS.slicer_real_sector
|
||||
CP (HL)
|
||||
JP Z,calc_sec_addr_in_bfr
|
||||
LAB_ram_d81e:
|
||||
LD A, (TM_VARS.slicer_need_save)
|
||||
OR A
|
||||
CALL NZ,slicer_save_buffer
|
||||
LAB_ram_d825:
|
||||
LD A, (TM_VARS.cur_disk)
|
||||
LD (TM_VARS.slicer_disk), A
|
||||
LD A, (TM_VARS.curr_track)
|
||||
LD (TM_VARS.slicer_track), A
|
||||
LD A, (TM_VARS.tmp_slicer_real_sector)
|
||||
LD (TM_VARS.slicer_real_sector), A
|
||||
LD A, (TM_VARS.tmp_slicer_can_read)
|
||||
OR A
|
||||
CALL NZ,slicer_read_buffer
|
||||
XOR A
|
||||
LD (TM_VARS.slicer_need_save), A
|
||||
|
||||
calc_sec_addr_in_bfr:
|
||||
LD A, (TM_VARS.curr_sec)
|
||||
AND 0x3
|
||||
LD L, A
|
||||
LD H, 0x0
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
ADD HL, HL
|
||||
LD DE, TM_VARS.slicer_buffer
|
||||
ADD HL, DE
|
||||
EX DE, HL
|
||||
LD HL, (TM_VARS.dma_addr)
|
||||
LD C, 0x80
|
||||
LD A, (TM_VARS.tmp_slicer_operation)
|
||||
OR A
|
||||
JP NZ,csa_no_save
|
||||
LD A, 0x1
|
||||
LD (TM_VARS.slicer_need_save), A
|
||||
EX DE, HL
|
||||
csa_no_save:
|
||||
LD A, (DE)
|
||||
INC DE
|
||||
LD (HL), A
|
||||
INC HL
|
||||
DEC C
|
||||
JP NZ,csa_no_save
|
||||
LD A, (TM_VARS.tmp_slicer_flush)
|
||||
CP 0x1
|
||||
LD A, (TM_VARS.tmp_slicer_result)
|
||||
RET NZ
|
||||
OR A
|
||||
RET NZ
|
||||
XOR A
|
||||
LD (TM_VARS.slicer_need_save), A
|
||||
CALL slicer_save_buffer
|
||||
LD A, (TM_VARS.tmp_slicer_result)
|
||||
RET
|
||||
|
||||
slicer_save_buffer:
|
||||
CALL slicer_get_floppy_args
|
||||
LD C, 0xA4 ; VG93 CMD
|
||||
CALL MON_ENTRY.write_floppy
|
||||
LD (TM_VARS.tmp_slicer_result), A
|
||||
RET
|
||||
|
||||
slicer_read_buffer:
|
||||
CALL slicer_get_floppy_args
|
||||
LD C, 0x84 ; VG93 CMD
|
||||
CALL MON_ENTRY.read_floppy
|
||||
LD (TM_VARS.tmp_slicer_result), A
|
||||
RET
|
||||
|
||||
slicer_get_floppy_args:
|
||||
LD HL,sector_128_interleave_b ;= 1h
|
||||
LD A, (TM_VARS.slicer_real_sector)
|
||||
ADD A, L
|
||||
LD L, A
|
||||
LD E, (HL)
|
||||
LD A, (TM_VARS.slicer_track)
|
||||
LD D, A
|
||||
LD HL, TM_VARS.slicer_buffer
|
||||
LD A, (TM_VARS.slicer_disk)
|
||||
RET
|
||||
|
||||
sector_128_interleave_b:
|
||||
db 1, 8, 6, 4, 2, 9, 7, 5, 3
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Print zerro ended string; HL -> string
|
||||
; -------------------------------------------------------
|
||||
print_strz:
|
||||
LD A, (HL)
|
||||
OR A
|
||||
RET Z
|
||||
LD C, A
|
||||
PUSH HL
|
||||
CALL conout_f
|
||||
POP HL
|
||||
INC HL
|
||||
JP print_strz
|
||||
|
||||
msg_hello:
|
||||
db ASCII_ESC, "60" ; Режим 32x18 <ESC>60
|
||||
db ASCII_ESC, "8", 2 ; Выбор палтитры <ESC>82
|
||||
db ASCII_ESC, "42" ; Выбор цвета <ESC>42
|
||||
db "48K CP/M (V2.2) REL.7/2D\r\n64K RAM DISK (A:)\r\n180K FD (B:)\r\n", 0
|
||||
|
||||
dph:
|
||||
dw 0h ; Disk A
|
||||
dw 0h
|
||||
dw 0h
|
||||
dw 0h
|
||||
dw 0xBB3F
|
||||
dw 0xBB0E
|
||||
dw 0xBBDE
|
||||
dw 0xBBBF
|
||||
|
||||
dph1:
|
||||
dw 0h ; Disk B
|
||||
dw 0h
|
||||
dw 0h
|
||||
dw 0h
|
||||
dw 0xBB3F
|
||||
dw 0xBB1D
|
||||
dw 0xBC05
|
||||
dw 0xBBEE
|
||||
|
||||
dph2:
|
||||
dw 0h ; Disk C
|
||||
dw 0h
|
||||
dw 0h
|
||||
dw 0h
|
||||
dw 0xBB3F
|
||||
dw 0xBB1D
|
||||
dw 0xBC2C
|
||||
dw 0xBC15
|
||||
|
||||
dpb_192:
|
||||
dw 16 ; Sector per track
|
||||
db 3 ; block shift 3->1k
|
||||
db 7 ; block mask: 7->1k
|
||||
db 0 ; extent mask
|
||||
dw 63 ; block count - 1
|
||||
dw 31 ; Dir size - 1
|
||||
dw 80h ; Dir bitmap
|
||||
dw 8h ; checksum vector size
|
||||
dw 0h ; reserved
|
||||
|
||||
dpb_720:
|
||||
dw 36
|
||||
db 4
|
||||
db 15
|
||||
db 1
|
||||
dw 179
|
||||
dw 63
|
||||
dw 80h
|
||||
dw 10h
|
||||
dw 0h
|
||||
db 4h
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Filler to align blocks in ROM
|
||||
; -------------------------------------------------------
|
||||
LAST EQU $
|
||||
CODE_SIZE EQU LAST-0xD600
|
||||
FILL_SIZE EQU 0x400-CODE_SIZE
|
||||
|
||||
DISPLAY "| BIOS\t| ",/H,boot_f," | ",/H,CODE_SIZE," | ",/H,FILL_SIZE," |"
|
||||
|
||||
FILLER
|
||||
DS FILL_SIZE, 0x00
|
||||
|
||||
ENDMODULE
|
||||
|
||||
IFNDEF BUILD_ROM
|
||||
OUTEND
|
||||
ENDIF
|
||||
@ -1,39 +0,0 @@
|
||||
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
; Definition of CPM BIOS entries to compile depended
|
||||
; modules
|
||||
;
|
||||
; By Romych 2025-09-09
|
||||
; ======================================================
|
||||
IFNDEF _BIOS
|
||||
DEFINE _BIOS
|
||||
|
||||
MODULE BIOS
|
||||
|
||||
boot_f EQU 0xD600
|
||||
wboot_f EQU 0xD603
|
||||
const_f EQU 0xD606
|
||||
conin_f EQU 0xD609
|
||||
conout_f EQU 0xD60C
|
||||
list_f EQU 0xD60F
|
||||
punch_f EQU 0xD612
|
||||
reader_f EQU 0xD615
|
||||
home_f EQU 0xD618
|
||||
seldsk_f EQU 0xD61B
|
||||
settrk_f EQU 0xD61E
|
||||
setsec_f EQU 0xD621
|
||||
setdma_f EQU 0xD624
|
||||
read_f EQU 0xD627
|
||||
write_f EQU 0xD62A
|
||||
sectran_f EQU 0xD630
|
||||
reserved_f1 EQU 0xD633
|
||||
reserved_f2 EQU 0xD636
|
||||
tape_read_f EQU 0xD639
|
||||
tape_write_f EQU 0xD63C
|
||||
tape_wait_f EQU 0xD63F
|
||||
|
||||
ENDMODULE
|
||||
|
||||
|
||||
ENDIF
|
||||
@ -1,857 +0,0 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
; CPM CPP, ROM PART
|
||||
; AT 0xDB00
|
||||
;
|
||||
; Disassembled by Romych 2025-09-09
|
||||
; =======================================================
|
||||
|
||||
INCLUDE "io.inc"
|
||||
INCLUDE "equates.inc"
|
||||
INCLUDE "external_ram.inc"
|
||||
INCLUDE "mon_entries.inc"
|
||||
|
||||
IFNDEF BUILD_ROM
|
||||
OUTPUT ccp_rom.bin
|
||||
ENDIF
|
||||
|
||||
MODULE CCP_ROM
|
||||
|
||||
ORG 0xDB00
|
||||
|
||||
ccp_entry:
|
||||
LD HL, 0x0 ; prevent stack overflow
|
||||
ADD HL, SP
|
||||
LD (TM_VARS.saved_stack_ptr), HL
|
||||
LD SP, TM_VARS.safe_stack_ptr
|
||||
|
||||
CALL get_cmd_index
|
||||
LD HL, ccp_commands ;= DB6Ch
|
||||
LD E, A
|
||||
LD D, 0x0
|
||||
ADD HL, DE
|
||||
ADD HL, DE
|
||||
LD A, (HL)
|
||||
INC HL
|
||||
LD H, (HL)
|
||||
LD L, A
|
||||
JP (HL) ; jump to command
|
||||
|
||||
ccp_commands_str:
|
||||
db "DIR READ WRITEEXIT "
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Search user command position in available commands list
|
||||
; -------------------------------------------------------
|
||||
get_cmd_index:
|
||||
LD HL, ccp_commands_str ; -> 'DIR'
|
||||
LD C, 0x0
|
||||
.cmd_next:
|
||||
LD A, C
|
||||
CP CCP_COMMANDS_COUNT
|
||||
RET NC
|
||||
LD DE, CCP_RAM.ccp_cmd_line_buff
|
||||
LD B, CCP_COMMAND_SIZE
|
||||
.cmp_nxt:
|
||||
LD A, (DE)
|
||||
CP (HL) ; -> 'DIR'
|
||||
JP NZ, .no_eq
|
||||
INC DE
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, .cmp_nxt
|
||||
LD A, (DE)
|
||||
CP 0x20
|
||||
JP NZ, .inc_next
|
||||
LD A, C
|
||||
RET
|
||||
.no_eq:
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, .no_eq
|
||||
.inc_next:
|
||||
INC C
|
||||
JP .cmd_next
|
||||
|
||||
; Command handlers ref table
|
||||
ccp_commands:
|
||||
dw ccp_dir
|
||||
dw ccp_read
|
||||
dw ccp_write
|
||||
dw ccp_exit1
|
||||
dw ccp_ret
|
||||
|
||||
ccp_ret:
|
||||
LD HL, (TM_VARS.saved_stack_ptr)
|
||||
LD SP, HL
|
||||
JP CCP_RAM.ccp_ret_func ; ccp_ram_B200 + 6A5h
|
||||
|
||||
ccp_exit1:
|
||||
JP MON_ENTRY.mon_cold_start
|
||||
|
||||
ccp_dir:
|
||||
CALL CCP_RAM.ccp_get_parameter
|
||||
CALL CCP_RAM.ccp_drive_sel
|
||||
LD HL, CCP_RAM.ccp_cmd_line_buff
|
||||
LD A, (HL)
|
||||
CP ' '
|
||||
JP NZ, .has_par
|
||||
LD B, 11
|
||||
|
||||
.fill_qmark:
|
||||
LD (HL), '?'
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, .fill_qmark
|
||||
.has_par:
|
||||
CALL CCP_RAM.ccp_find_first
|
||||
JP NZ, .f_found
|
||||
CALL CCP_RAM.ccp_out_no_file
|
||||
JP CCP_RAM.ccp_proc_interupted
|
||||
.f_found:
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
LD HL, 0x0
|
||||
LD (TM_VARS.tmp_dir_total), HL
|
||||
LD E, 0x0
|
||||
.do_next_direntry:
|
||||
PUSH DE
|
||||
CALL CCP_RAM.ccp_find_first
|
||||
POP DE
|
||||
PUSH DE
|
||||
|
||||
; Find file with e number
|
||||
.find_file_e:
|
||||
DEC E
|
||||
JP M, .file_e_not_fnd
|
||||
PUSH DE
|
||||
CALL CCP_RAM.ccp_bdos_find_next
|
||||
POP DE
|
||||
JP Z, .file_e_found
|
||||
JP .find_file_e
|
||||
.file_e_not_fnd:
|
||||
LD A, (CCP_RAM.ccp_bdos_call_result)
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
AND 01100000b
|
||||
LD C, A
|
||||
PUSH BC
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
CALL CCP_RAM.ccp_bdos_drv_get
|
||||
INC A
|
||||
LD (EXT_RAM.std_dma_buff), A
|
||||
POP BC
|
||||
LD B, 0x0
|
||||
LD HL, EXT_RAM.std_dma_buff+1 ; std_dma_buff+1
|
||||
LD E, L
|
||||
LD D, H
|
||||
ADD HL, BC
|
||||
|
||||
; copy filename to tmp FCB and out to screen
|
||||
LD B, 0x1
|
||||
.copy_next:
|
||||
LD A, (HL)
|
||||
LD (DE), A
|
||||
LD C, A
|
||||
CALL BIOS.conout_f
|
||||
INC HL
|
||||
INC DE
|
||||
INC B
|
||||
LD A, B
|
||||
CP 12
|
||||
JP C, .copy_next
|
||||
|
||||
.zero_up_36:
|
||||
XOR A
|
||||
LD (DE), A ; zero at end
|
||||
INC B
|
||||
LD A, B
|
||||
CP 36
|
||||
JP C, .zero_up_36
|
||||
|
||||
; calc file size for current entry
|
||||
LD DE, EXT_RAM.std_dma_buff
|
||||
CALL cpp_bdos_f_size
|
||||
LD HL, (EXT_RAM.fcb_ra_record_num) ; file size in blocks
|
||||
|
||||
; get disk blk size
|
||||
LD A, (TM_VARS.bdos_curdsk)
|
||||
OR A
|
||||
JP NZ, .no_dsk_a0
|
||||
LD B, 0x3 ; for A - blk=3
|
||||
JP .LAB_ram_dbfe
|
||||
.no_dsk_a0:
|
||||
LD B, 0x4 ; for other disks - blk=4
|
||||
.LAB_ram_dbfe:
|
||||
LD C, L
|
||||
|
||||
; convert 128b OS block to disk blocks
|
||||
.mul_to_dsk_blk:
|
||||
XOR A
|
||||
LD A, H
|
||||
RRA
|
||||
LD H, A
|
||||
LD A, L
|
||||
RRA
|
||||
LD L, A
|
||||
DEC B
|
||||
JP NZ, .mul_to_dsk_blk
|
||||
; round up
|
||||
LD A, (TM_VARS.bdos_curdsk)
|
||||
OR A
|
||||
JP NZ, .no_dsk_a1
|
||||
LD A, 00000111b ; for A - ~(~0 << 3)
|
||||
JP .ds_skip1
|
||||
.no_dsk_a1:
|
||||
LD A, 00001111b ; for other dsk - ~(~0 << 4)
|
||||
.ds_skip1:
|
||||
AND C
|
||||
JP Z, .cvt_blk_kb
|
||||
INC HL
|
||||
|
||||
; Convert blocks to kilobytes (A-1k B-2k)
|
||||
.cvt_blk_kb:
|
||||
LD A, (TM_VARS.bdos_curdsk)
|
||||
OR A
|
||||
JP Z, .ds_skip2
|
||||
ADD HL, HL ; 2k
|
||||
|
||||
; add file size to total dir size
|
||||
.ds_skip2:
|
||||
EX DE, HL
|
||||
LD HL, (TM_VARS.tmp_dir_total)
|
||||
ADD HL, DE
|
||||
LD (TM_VARS.tmp_dir_total), HL
|
||||
|
||||
; display size in K
|
||||
LD C, ' '
|
||||
CALL BIOS.conout_f
|
||||
CALL BIOS.conout_f
|
||||
CALL ccp_cout_num
|
||||
LD C, 'K'
|
||||
CALL BIOS.conout_f
|
||||
CALL CCP_RAM.ccp_getkey_no_wait
|
||||
JP NZ, CCP_RAM.ccp_proc_interupted
|
||||
POP DE
|
||||
INC E
|
||||
JP .do_next_direntry
|
||||
|
||||
.file_e_found:
|
||||
POP DE
|
||||
LD HL,msg_free_space ;= "\r\nFREE SPACE "
|
||||
|
||||
; Out: FREE SPACE
|
||||
CALL ccp_out_str_z
|
||||
LD A, (TM_VARS.bdos_curdsk)
|
||||
OR A
|
||||
JP NZ, .no_dsk_a3
|
||||
LD DE, DEF_DISK_A_SIZE ; 63 blk
|
||||
JP .calc_remanis_ds
|
||||
.no_dsk_a3:
|
||||
LD DE, DEF_DISK_B_SIZE ; 360 blk * 2k = 720k
|
||||
|
||||
; Disk size - Dir size = Free
|
||||
.calc_remanis_ds:
|
||||
LD HL, (TM_VARS.tmp_dir_total)
|
||||
LD A, E
|
||||
SUB L
|
||||
LD E, A
|
||||
LD A, D
|
||||
SBC A, H
|
||||
LD D, A
|
||||
CALL ccp_cout_num
|
||||
LD C, 'K'
|
||||
CALL BIOS.conout_f
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
JP CCP_RAM.ccp_proc_interupted
|
||||
|
||||
msg_free_space:
|
||||
db "\r\nFREE SPACE ",0
|
||||
|
||||
ccp_cout_num:
|
||||
LD A, D
|
||||
AND 11100000b
|
||||
JP Z, .less_224
|
||||
LD C, '*'
|
||||
CALL BIOS.conout_f
|
||||
CALL BIOS.conout_f
|
||||
CALL BIOS.conout_f
|
||||
CALL BIOS.conout_f
|
||||
RET
|
||||
|
||||
.less_224:
|
||||
LD HL, 0x0
|
||||
; copy number to BC
|
||||
LD B, D
|
||||
LD C, E
|
||||
LD DE, 0x1
|
||||
LD A, 13
|
||||
|
||||
.bc_rra:
|
||||
PUSH AF
|
||||
PUSH HL
|
||||
; BC >> 1
|
||||
LD A, B
|
||||
RRA
|
||||
LD B, A
|
||||
LD A, C
|
||||
RRA
|
||||
LD C, A
|
||||
JP NC, .bc_rra_ex
|
||||
POP HL
|
||||
CALL cpp_daa16
|
||||
PUSH HL
|
||||
|
||||
.bc_rra_ex:
|
||||
LD L, E
|
||||
LD H, D
|
||||
CALL cpp_daa16
|
||||
EX DE, HL
|
||||
POP HL
|
||||
POP AF
|
||||
DEC A
|
||||
JP NZ, .bc_rra
|
||||
LD D, 0x4
|
||||
LD B, 0x0
|
||||
|
||||
LAB_ram_dcc5:
|
||||
LD E, 0x4
|
||||
|
||||
LAB_ram_dcc7:
|
||||
LD A, L
|
||||
RLA
|
||||
LD L, A
|
||||
LD A, H
|
||||
RLA
|
||||
LD H, A
|
||||
LD A, C
|
||||
RLA
|
||||
LD C, A
|
||||
DEC E
|
||||
JP NZ, LAB_ram_dcc7
|
||||
LD A, C
|
||||
AND 0xf
|
||||
ADD A, '0'
|
||||
CP '0'
|
||||
JP NZ, .no_zero
|
||||
DEC B
|
||||
INC B
|
||||
JP NZ, .b_no_one
|
||||
LD A, D
|
||||
DEC A
|
||||
JP Z, .d_one
|
||||
LD A, ' '
|
||||
JP .b_no_one
|
||||
|
||||
.d_one:
|
||||
LD A, '0'
|
||||
.no_zero:
|
||||
LD B, 0x1
|
||||
.b_no_one:
|
||||
LD C, A
|
||||
CALL BIOS.conout_f
|
||||
DEC D
|
||||
JP NZ, LAB_ram_dcc5
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; ADD with correction HL=HL+DE
|
||||
; -------------------------------------------------------
|
||||
cpp_daa16:
|
||||
LD A, L
|
||||
ADD A, E
|
||||
DAA
|
||||
LD L, A
|
||||
LD A, H
|
||||
ADC A, D
|
||||
DAA
|
||||
LD H, A
|
||||
RET
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Call BDOS function 35 (F_SIZE) - Compute file size
|
||||
; -------------------------------------------------------
|
||||
cpp_bdos_f_size:
|
||||
LD C, 35
|
||||
JP EXT_RAM.jp_bdos_enter
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Read data from Tape
|
||||
; -------------------------------------------------------
|
||||
ccp_read:
|
||||
CALL BIOS.const_f
|
||||
OR A
|
||||
JP Z, .no_key ; chk key pressed
|
||||
CALL BIOS.conin_f
|
||||
JP ccp_read
|
||||
.no_key:
|
||||
CALL CCP_RAM.ccp_bdos_drv_allreset
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
|
||||
; wait tape block header
|
||||
LD A, 100
|
||||
CALL BIOS.tape_wait_f
|
||||
OR A
|
||||
JP NZ, key_pressed1
|
||||
|
||||
; try to load header 8 times
|
||||
LD E, 8
|
||||
.load8_cont:
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
CALL BIOS.tape_read_f
|
||||
CP 0x4
|
||||
JP Z, key_pressed1
|
||||
OR A
|
||||
JP Z, .hdr_id_chk
|
||||
DEC E
|
||||
JP NZ, .load8_cont
|
||||
JP cp_load_err_what
|
||||
|
||||
; Check blk ID, will be 0x8000
|
||||
.hdr_id_chk:
|
||||
LD A, B
|
||||
CP 0x80
|
||||
JP NZ, .load8_cont
|
||||
LD A, C
|
||||
OR A
|
||||
JP NZ, .load8_cont
|
||||
; set end of file name strZ
|
||||
XOR A
|
||||
LD (EXT_RAM.std_dma_buff+12), A
|
||||
LD DE, EXT_RAM.std_dma_buff
|
||||
LD HL, CCP_RAM.ccp_fname_addr ;= 2020h
|
||||
LD (CCP_RAM.ccp_name_addr), HL ;= B208h
|
||||
|
||||
.cp_name_char:
|
||||
LD A, (DE)
|
||||
OR A
|
||||
JP Z, .name_copied
|
||||
LD (HL), A ;= 2020h
|
||||
INC HL
|
||||
INC DE
|
||||
JP .cp_name_char
|
||||
.name_copied:
|
||||
LD (HL), 0x0 ; mark end of strZ
|
||||
CALL CCP_RAM.ccp_get_parameter
|
||||
JP NZ, CCP_RAM.SUB_ram_b409
|
||||
|
||||
; Output file name to screen
|
||||
LD HL, CCP_RAM.ccp_cmd_line_buff
|
||||
LD B, 11
|
||||
|
||||
.name_output:
|
||||
LD A, (HL)
|
||||
AND 01111111b ; 7bit ASCII
|
||||
LD C, A
|
||||
CALL BIOS.conout_f
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, .name_output
|
||||
; Out ' '
|
||||
LD C, ' '
|
||||
CALL BIOS.conout_f
|
||||
CALL BIOS.conout_f
|
||||
CALL BIOS.conout_f
|
||||
CALL CCP_RAM.ccp_open_f
|
||||
JP Z, .recreate_f
|
||||
LD HL,MSG_EX ;= "*EX* "
|
||||
CALL ccp_out_str_z
|
||||
LD HL, CCP_RAM.ccp_cmd_line_buff+8
|
||||
; '$$$' at the end of buffer
|
||||
LD A, '$'
|
||||
LD (HL), A
|
||||
INC HL
|
||||
LD (HL), A
|
||||
INC HL
|
||||
LD (HL), A
|
||||
|
||||
; delete file if exists and create new
|
||||
.recreate_f:
|
||||
LD DE, CCP_RAM.ccp_current_fcb
|
||||
PUSH DE
|
||||
CALL CCP_RAM.ccp_bdos_delete
|
||||
POP DE
|
||||
CALL CCP_RAM.ccp_bdos_create_f
|
||||
JP Z, CCP_RAM.ccp_no_space_l1 ; out NO SPACE if err
|
||||
XOR A
|
||||
LD (CCP_RAM.ccp_cmd_line_buff+31), A
|
||||
|
||||
; Load block with ID=1
|
||||
LD DE, 1
|
||||
.fin_load:
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
PUSH DE
|
||||
|
||||
.blk_ld_rep:
|
||||
CALL BIOS.tape_read_f
|
||||
CP 4
|
||||
JP Z, key_pressed2
|
||||
OR A
|
||||
JP Z, .blk_id_chk
|
||||
LD A, (CCP_RAM.ccp_cmd_line_buff+31)
|
||||
AND 0x7f
|
||||
JP NZ, cp_read_cs
|
||||
|
||||
.blk_id_chk:
|
||||
LD A, C
|
||||
OR B
|
||||
JP Z, .blk_ld_rep
|
||||
|
||||
; Check id for 0xFFFF - last blk
|
||||
LD A, C
|
||||
AND B
|
||||
CP 0xff
|
||||
JP Z, blk_id_last
|
||||
; Check ID for DE
|
||||
LD A, C
|
||||
CP E
|
||||
JP NZ, blk_ne_id
|
||||
LD A, B
|
||||
CP D
|
||||
JP NZ, blk_ne_id
|
||||
; Ok, write blk to disk
|
||||
LD DE, EXT_RAM.std_dma_buff
|
||||
CALL CCP_RAM.ccp_bdos_dma_set
|
||||
LD DE, CCP_RAM.ccp_current_fcb
|
||||
CALL CCP_RAM.ccp_bdos_f_write
|
||||
POP DE
|
||||
JP NZ,ccp_del_f_no_space
|
||||
INC DE
|
||||
JP .fin_load
|
||||
|
||||
cp_load_err_what:
|
||||
LD HL,msg_what ;= "WHAT?\a"
|
||||
CALL ccp_out_str_z
|
||||
JP load_restart
|
||||
|
||||
cp_read_cs:
|
||||
POP BC
|
||||
LD HL, msg_cs ;= "<CS "
|
||||
CALL ccp_out_str_z
|
||||
CALL ccp_cout_num
|
||||
JP out_clos
|
||||
|
||||
blk_ne_id:
|
||||
POP BC
|
||||
LD HL, msg_sq ;= "<SQ "
|
||||
CALL ccp_out_str_z
|
||||
CALL ccp_cout_num
|
||||
|
||||
out_clos:
|
||||
LD HL, msg_clos ;= ">\a"
|
||||
CALL ccp_out_str_z
|
||||
|
||||
; cleanup partial file and load again
|
||||
load_restart:
|
||||
LD DE, CCP_RAM.ccp_current_fcb
|
||||
CALL CCP_RAM.ccp_bdos_delete
|
||||
CALL CCP_RAM.ccp_set_dma_std_addr
|
||||
JP ccp_read
|
||||
|
||||
blk_id_last:
|
||||
LD DE, CCP_RAM.ccp_current_fcb
|
||||
CALL CCP_RAM.ccp_bdos_close_f
|
||||
INC A
|
||||
JP Z,ccp_del_f_no_space ; If no success, may be no disk space
|
||||
CALL CCP_RAM.ccp_set_dma_std_addr ; reset DMA buff
|
||||
JP ccp_read ; and read next file
|
||||
|
||||
key_pressed2:
|
||||
POP DE
|
||||
PUSH BC
|
||||
LD DE, CCP_RAM.ccp_current_fcb
|
||||
CALL CCP_RAM.ccp_bdos_delete
|
||||
POP BC
|
||||
LD A, C
|
||||
AND 0x7f
|
||||
CP CTRL_C
|
||||
JP Z, ctrl_c_or_esc
|
||||
CP ASCII_ESC
|
||||
JP Z, ctrl_c_or_esc
|
||||
LD HL, msg_break ;= "*BREAK*"
|
||||
CALL ccp_out_str_z
|
||||
JP ccp_read
|
||||
key_pressed1:
|
||||
LD A, C
|
||||
AND 0x7f
|
||||
CP CTRL_C
|
||||
JP Z, ctrl_c
|
||||
CP ASCII_ESC
|
||||
JP NZ, ccp_read
|
||||
ctrl_c:
|
||||
CALL CCP_RAM.ccp_set_dma_std_addr
|
||||
JP CCP_RAM.ccp_proc_interupted
|
||||
ctrl_c_or_esc:
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
JP ctrl_c
|
||||
|
||||
msg_what:
|
||||
db "WHAT?\a",0
|
||||
|
||||
msg_cs:
|
||||
db "<CS ", 0
|
||||
|
||||
msg_sq:
|
||||
db "<SQ ", 0
|
||||
|
||||
msg_break:
|
||||
db "*BREAK*", 0
|
||||
|
||||
MSG_EX:
|
||||
db "*EX* ", 0
|
||||
|
||||
msg_clos:
|
||||
db ">\a", 0
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Out zerro ended string
|
||||
; In: HL -> strZ
|
||||
; -------------------------------------------------------
|
||||
ccp_out_str_z:
|
||||
LD A, (HL)
|
||||
OR A
|
||||
RET Z
|
||||
LD C, A
|
||||
CALL BIOS.conout_f
|
||||
INC HL
|
||||
JP ccp_out_str_z
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Delete file and out No Space message
|
||||
; -------------------------------------------------------
|
||||
ccp_del_f_no_space:
|
||||
LD DE, CCP_RAM.ccp_current_fcb
|
||||
CALL CCP_RAM.ccp_bdos_delete
|
||||
JP CCP_RAM.ccp_no_space_l1
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Read current file next block
|
||||
; Out: A=0 - Ok, 0xFF - HW Error;
|
||||
; -------------------------------------------------------
|
||||
cpp_read_f_blk:
|
||||
LD DE, TM_VARS.ccp_FCB ; FCB here
|
||||
JP CCP_RAM.ccp_bdos_read_f
|
||||
|
||||
ccp_write:
|
||||
CALL CCP_RAM.ccp_get_parameter
|
||||
CALL CCP_RAM.ccp_drive_sel
|
||||
LD HL, CCP_RAM.ccp_cmd_line_buff
|
||||
LD A, (HL)
|
||||
CP ' '
|
||||
JP NZ, .find_f
|
||||
LD B, 11
|
||||
|
||||
.fill_with_qm:
|
||||
LD (HL), '?'
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, .fill_with_qm
|
||||
|
||||
.find_f:
|
||||
CALL CCP_RAM.ccp_find_first
|
||||
JP NZ, .found_f
|
||||
CALL CCP_RAM.ccp_out_no_file
|
||||
JP CCP_RAM.ccp_proc_interupted
|
||||
|
||||
.found_f:
|
||||
LD E, 0 ; file counter
|
||||
|
||||
.do_next_f1:
|
||||
PUSH DE
|
||||
CALL CCP_RAM.ccp_find_first
|
||||
POP DE
|
||||
PUSH DE
|
||||
|
||||
.do_next_f2:
|
||||
DEC E
|
||||
JP M, .do_file
|
||||
PUSH DE
|
||||
CALL CCP_RAM.ccp_bdos_find_next
|
||||
POP DE
|
||||
JP Z, .no_more_f
|
||||
JP .do_next_f2
|
||||
|
||||
.do_file:
|
||||
POP BC
|
||||
PUSH BC
|
||||
LD A, C
|
||||
OR A
|
||||
JP Z, .calc_addr
|
||||
LD DE, 1200
|
||||
|
||||
; Delay with key interrupt check
|
||||
.delay_1:
|
||||
XOR A
|
||||
.delay_2:
|
||||
DEC A
|
||||
JP NZ, .delay_2
|
||||
PUSH DE
|
||||
CALL CCP_RAM.ccp_getkey_no_wait
|
||||
POP DE
|
||||
JP NZ, CCP_RAM.ccp_proc_interupted
|
||||
DEC DE
|
||||
LD A, D
|
||||
OR E
|
||||
JP NZ, .delay_1
|
||||
|
||||
.calc_addr:
|
||||
LD A, (CCP_RAM.ccp_bdos_call_result)
|
||||
; A=0-3 - for Ok, calc address od DIR entry in DMA buffer
|
||||
RRCA
|
||||
RRCA
|
||||
RRCA
|
||||
AND 01100000b
|
||||
LD C, A
|
||||
PUSH BC
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
CALL CCP_RAM.ccp_bdos_drv_get
|
||||
INC A
|
||||
LD (TM_VARS.ccp_FCB), A
|
||||
POP BC
|
||||
LD B, 0x0
|
||||
LD HL, EXT_RAM.std_dma_buff+1
|
||||
ADD HL, BC
|
||||
LD DE, TM_VARS.ccp_FCB_fn
|
||||
LD B, 0x1
|
||||
|
||||
.copy_fn:
|
||||
LD A, (HL)
|
||||
LD (DE), A
|
||||
INC HL
|
||||
INC DE
|
||||
INC B
|
||||
LD A, B
|
||||
CP 12
|
||||
JP C, .copy_fn
|
||||
|
||||
.fillz_fn:
|
||||
XOR A
|
||||
LD (DE), A
|
||||
INC DE
|
||||
INC B
|
||||
LD A, B
|
||||
CP 36
|
||||
JP C, .fillz_fn
|
||||
LD HL, TM_VARS.ccp_FCB_fn
|
||||
CALL ccp_out_str_z
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
|
||||
; Empty first 128 bytes of DMA buffer
|
||||
LD B, 128
|
||||
.clear_buf:
|
||||
LD (HL), 0x0
|
||||
INC HL
|
||||
DEC B
|
||||
JP NZ, .clear_buf
|
||||
; Copy file name at buffer start
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
LD DE, TM_VARS.ccp_FCB_fn
|
||||
LD B, 8
|
||||
|
||||
.find_sp:
|
||||
LD A, (DE)
|
||||
CP ' '
|
||||
JP Z, .sp_rep_dot ; ' ' -> '.'
|
||||
LD (HL), A
|
||||
INC HL
|
||||
INC DE
|
||||
JP .find_sp
|
||||
.sp_rep_dot:
|
||||
LD (HL), '.'
|
||||
INC HL
|
||||
CALL CCP_RAM.ccp_find_nxt_par
|
||||
|
||||
.cont_copy_fn:
|
||||
LD A, (DE)
|
||||
LD (HL), A
|
||||
OR A
|
||||
JP Z, .end_copy
|
||||
INC HL
|
||||
INC DE
|
||||
JP .cont_copy_fn
|
||||
|
||||
.end_copy:
|
||||
LD DE, TM_VARS.ccp_FCB
|
||||
CALL CCP_RAM.ccp_bdos_call_open
|
||||
LD DE, 0x8000 ; Block ID
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
CALL cpp_pause_tape_wr_blk
|
||||
CALL cpp_pause_tape_wr_blk
|
||||
LD DE, 0x1
|
||||
|
||||
; Read file block and write to Tape
|
||||
.read_f_write_t:
|
||||
PUSH DE
|
||||
CALL cpp_read_f_blk
|
||||
; a=0xff if error; a=1 - EOF
|
||||
DEC A
|
||||
JP Z, .eof
|
||||
LD A, (TM_VARS.ccp_FCB_CR)
|
||||
AND 0x7f
|
||||
CP 0x1
|
||||
JP NZ, .write_once
|
||||
; Write block to Tape with ID=0 twice
|
||||
LD DE, 0x0 ; Block ID=0
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
CALL cpp_pause_tape_wr_blk
|
||||
|
||||
.write_once:
|
||||
CALL CCP_RAM.ccp_getkey_no_wait
|
||||
LD HL, EXT_RAM.std_dma_buff
|
||||
POP DE
|
||||
JP NZ, CCP_RAM.ccp_proc_interupted
|
||||
CALL cpp_pause_tape_wr_blk
|
||||
; Inc Block ID and continue
|
||||
INC DE
|
||||
JP .read_f_write_t
|
||||
|
||||
.eof:
|
||||
POP DE
|
||||
EX DE, HL
|
||||
LD (EXT_RAM.std_dma_buff), HL
|
||||
EX DE, HL
|
||||
|
||||
; Final block ID=0xFFFF
|
||||
LD DE, 0xffff
|
||||
; Write twice
|
||||
CALL cpp_pause_tape_wr_blk
|
||||
CALL cpp_pause_tape_wr_blk
|
||||
POP DE
|
||||
INC E
|
||||
JP .do_next_f1
|
||||
|
||||
.no_more_f:
|
||||
POP DE
|
||||
CALL CCP_RAM.ccp_out_crlf
|
||||
JP CCP_RAM.ccp_proc_interupted
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Write block to tape after pause
|
||||
; -------------------------------------------------------
|
||||
cpp_pause_tape_wr_blk:
|
||||
LD BC, 1500
|
||||
.delay:
|
||||
DEC BC
|
||||
LD A, B
|
||||
OR C
|
||||
JP NZ, .delay
|
||||
JP BIOS.tape_write_f
|
||||
RET NC
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Filler to align blocks in ROM
|
||||
; -------------------------------------------------------
|
||||
LAST EQU $
|
||||
CODE_SIZE EQU LAST-0xDB00
|
||||
FILL_SIZE EQU 0x500-CODE_SIZE
|
||||
|
||||
DISPLAY "| CCP_ROM\t| ",/H,ccp_entry," | ",/H,CODE_SIZE," | ",/H,FILL_SIZE," |"
|
||||
|
||||
FILLER
|
||||
DS FILL_SIZE, 0xFF
|
||||
|
||||
ENDMODULE
|
||||
|
||||
IFNDEF BUILD_ROM
|
||||
OUTEND
|
||||
ENDIF
|
||||
@ -1,43 +0,0 @@
|
||||
; ======================================================
|
||||
; Ocean-240.2
|
||||
; CP/M Combine file. Includes all sources to build
|
||||
; ROM 0xE000
|
||||
;
|
||||
; Disassembled by Romych 2025-09-09
|
||||
; ======================================================
|
||||
|
||||
DEFINE BUILD_ROM
|
||||
|
||||
DEVICE NOSLOT64K
|
||||
|
||||
;
|
||||
; |-----------|---------------|-----------|---------------------------------------|
|
||||
; | OFFSET | SIZE | Module | Memory Address |
|
||||
; |-----------|---------------|-----------|---------------------------------------|
|
||||
; | 0x0000 | 2048 (0x800) | CCP_RAM | 0xC000..0xC7FF -> RAM 0xB200..0xB5FF |
|
||||
; | 0x0800 | 3584 (0xE00) | BDOS | 0xC800.. |
|
||||
; | 0x1600 | 1024 (0x400) | BIOS | 0xD600..D9FF |
|
||||
; | 0x1B00 | 1280 (0x500) | CCP_ROM | 0xDB00..DFFF |
|
||||
; |-----------|---------------|-----------|---------------------------------------|
|
||||
;
|
||||
|
||||
DISPLAY "| Module\t| Offset | Code | Free |"
|
||||
DISPLAY "|-------------|---------|--------|--------|"
|
||||
|
||||
|
||||
OUTPUT cpm-C000.bin
|
||||
|
||||
INCLUDE "ccp_ram.asm"
|
||||
INCLUDE "bdos.asm"
|
||||
INCLUDE "bios.asm"
|
||||
INCLUDE "cpm_fill_1.asm"
|
||||
INCLUDE "ccp_rom.asm"
|
||||
|
||||
OUTEND
|
||||
|
||||
OUTPUT tm_vars.bin
|
||||
INCLUDE "tm_vars.inc"
|
||||
OUTEND
|
||||
|
||||
|
||||
END
|
||||
@ -1,24 +0,0 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
;
|
||||
; CPM filler, between BIOS and CCP_ROM
|
||||
;
|
||||
; By Romych 2025-09-09
|
||||
; =======================================================
|
||||
|
||||
IFNDEF BUILD_ROM
|
||||
OUTPUT ccp_fill_1.bin
|
||||
ENDIF
|
||||
|
||||
MODULE CPM_FILL_1
|
||||
ORG 0xDA00
|
||||
|
||||
FILL1 DS 107,0
|
||||
FILL2 DB 0x7B
|
||||
FILL3 DS 148, 0xFF
|
||||
|
||||
ENDMODULE
|
||||
|
||||
IFNDEF BUILD_ROM
|
||||
OUTEND
|
||||
ENDIF
|
||||
@ -1,104 +0,0 @@
|
||||
; ======================================================
|
||||
; Ocean-240.2
|
||||
; Equates for all assembly sources
|
||||
;
|
||||
; By Romych 2025-09-09
|
||||
; ======================================================
|
||||
|
||||
IFNDEF _EQUATES
|
||||
DEFINE _EQUATES
|
||||
|
||||
|
||||
ADDLIST EQU 0x08
|
||||
ASCII_BS EQU 0x08
|
||||
ASCII_CAN EQU 0x18
|
||||
ASCII_CR EQU 0x0D
|
||||
ASCII_EM EQU 0x19
|
||||
ASCII_ESC EQU 0x1B
|
||||
ASCII_FF EQU 0x0C
|
||||
ASCII_LF EQU 0x0A
|
||||
ASCII_SUB EQU 0x1A
|
||||
ASCII_TAB EQU 0x09
|
||||
ASCII_US EQU 0x1F
|
||||
; ------------------------------------------------------
|
||||
BDOS_CTLC EQU 0x03
|
||||
BDOS_NFUNCS EQU 0x29
|
||||
BELL_CHAR EQU 0x07
|
||||
BELL_PIN EQU 0x08
|
||||
; ------------------------------------------------------
|
||||
CCP_COMMAND_SIZE EQU 0x05
|
||||
CCP_COMMANDS_COUNT EQU 0x04
|
||||
|
||||
CCP_SRC_ADDR EQU 0xc000
|
||||
CCP_DST_ADDR EQU 0xb200
|
||||
CCP_SIZE EQU 0x809
|
||||
|
||||
|
||||
CTL EQU 0x5E
|
||||
CTLC EQU 0x03
|
||||
CTLS EQU 0x13
|
||||
CTRL_C EQU 0x03
|
||||
; ------------------------------------------------------
|
||||
DBPLIST EQU 0x0F
|
||||
DEF_DISK_A_SIZE EQU 0x3F
|
||||
DEF_DISK_B_SIZE EQU 0x0168
|
||||
DSK_MAP EQU 0x10
|
||||
DSK_MSK EQU 0x03
|
||||
DSK_SHF EQU 0x02
|
||||
DVERS EQU 0x22
|
||||
; ------------------------------------------------------
|
||||
EMPTY EQU 0xE5
|
||||
ENDDIR EQU 0xFFFF
|
||||
ESC_CMD_END EQU 0x1A
|
||||
EXT_NUM EQU 0x0C
|
||||
; ------------------------------------------------------
|
||||
FALSE EQU 0x00
|
||||
FCB_LEN EQU 0x20
|
||||
FCB_SHF EQU 0x05
|
||||
FDC_DD80RB EQU 0x21
|
||||
FDC_NOT_READY EQU 0x80
|
||||
FDC_RESTORE_L EQU 0x08
|
||||
FDC_SEEK_LV EQU 0x1C
|
||||
FWF_MASK EQU 0x80
|
||||
; ------------------------------------------------------
|
||||
JP_OPCODE EQU 0xC3
|
||||
; ------------------------------------------------------
|
||||
KBD_ACK EQU 0x10
|
||||
KBD_IRQ EQU 0x02
|
||||
KEY_ALF EQU 0x0D
|
||||
KEY_FIX EQU 0x15
|
||||
; ------------------------------------------------------
|
||||
LST_REC EQU 0x7F
|
||||
; ------------------------------------------------------
|
||||
MAX_EXT EQU 0x1F
|
||||
MAX_MOD EQU 0x0F
|
||||
MOD_NUM EQU 0x0E
|
||||
; ------------------------------------------------------
|
||||
NAM_LEN EQU 0x0F
|
||||
NXT_REC EQU 0x20
|
||||
; ------------------------------------------------------
|
||||
PIC_POLL_MODE EQU 0x0A
|
||||
PORT_C4 EQU 0x10
|
||||
PRINTER_ACK EQU 0x10
|
||||
PRINTER_IRQ EQU 0x08
|
||||
; ------------------------------------------------------
|
||||
RAN_REC EQU 0x21
|
||||
REC_CNT EQU 0x0F
|
||||
REC_SIZ EQU 0x80
|
||||
RO_FILE EQU 0x09
|
||||
RUB_OUT EQU 0x7F
|
||||
RX_READY EQU 0x02
|
||||
; ------------------------------------------------------
|
||||
TAPE_D EQU 0x08
|
||||
TAPE_P EQU 0x04
|
||||
TIMER_IRQ EQU 0x10
|
||||
TL_HIGH EQU 0x05
|
||||
TL_LOW EQU 0x03
|
||||
TL_MID EQU 0x04
|
||||
TMR0_SQWAVE EQU 0x36
|
||||
TRUE EQU 0xFF
|
||||
TX_READY EQU 0x01
|
||||
; ------------------------------------------------------
|
||||
U_BYTES EQU 0x0D
|
||||
|
||||
ENDIF
|
||||
@ -1,49 +0,0 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
;
|
||||
; External addresses references to build
|
||||
; CP/M and HW-Monitor
|
||||
; By Romych 2025-09-09
|
||||
; =======================================================
|
||||
|
||||
IFNDEF _EXT_RAM
|
||||
DEFINE _EXT_RAM
|
||||
|
||||
MODULE EXT_RAM
|
||||
|
||||
JP_WBOOT EQU 0x0000
|
||||
wboot_addr EQU 0x0001
|
||||
bdos_ioloc EQU 0x0003
|
||||
cur_user_no EQU 0x0004
|
||||
jp_bdos_enter EQU 0x0005
|
||||
BDOS_ENT_ADDR EQU 0x0006
|
||||
RST1 EQU 0x0008
|
||||
RST1_handler_addr EQU 0x0009
|
||||
RST2 EQU 0x0010
|
||||
RST3 EQU 0x0018
|
||||
RST4 EQU 0x0020
|
||||
RST5 EQU 0x0028
|
||||
RST6 EQU 0x0030
|
||||
RST7 EQU 0x0038
|
||||
reserve1 EQU 0x003b
|
||||
bios_var1 EQU 0x0041
|
||||
bios_var2 EQU 0x0042
|
||||
bios_var3 EQU 0x0043
|
||||
reserve2 EQU 0x0050
|
||||
FSR_STD EQU 0x005c
|
||||
NMI_ISR EQU 0x0066
|
||||
FSB_R0 EQU 0x007d
|
||||
FSB_R1 EQU 0x007e
|
||||
FSB_R2 EQU 0x007f
|
||||
std_dma_buff EQU 0x0080
|
||||
;std_dma_buff+1 EQU 0x0081
|
||||
;std_dma_buff_82 EQU 0x0082
|
||||
;std_dma_buff_83 EQU 0x0083
|
||||
;std_dma_buff+12 EQU 0x008c
|
||||
fcb_ra_record_num EQU 0x00a1
|
||||
loaded_program EQU 0x0100
|
||||
video_ram EQU 0x4000
|
||||
|
||||
ENDMODULE
|
||||
|
||||
ENDIF
|
||||
@ -1,132 +0,0 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
; Computer with FDC variant.
|
||||
; IO Ports definitions
|
||||
;
|
||||
; By Romych 2025-09-09
|
||||
; =======================================================
|
||||
|
||||
IFNDEF _IO_PORTS
|
||||
DEFINE _IO_PORTS
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР580ВВ55 DD79
|
||||
; -------------------------------------------------------
|
||||
; Port A - User port A
|
||||
USR_DD79PA EQU 0x00
|
||||
|
||||
; Port B - User port B
|
||||
USR_DD79PB EQU 0x01
|
||||
|
||||
; Port C - User port C
|
||||
USR_DD79PC EQU 0x02
|
||||
|
||||
; Config: [1][ma1,ma0][0-aO|1-aI],[0-chO,1-chI],[mb],[0-bO|1-bI],[0-clO,1-clI]
|
||||
; Set bit: [0][xxx][bbb][0|1]
|
||||
USR_DD79CTR EQU 0x03
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР1818ВГ93
|
||||
; -------------------------------------------------------
|
||||
; CMD
|
||||
FDC_CMD EQU 0x20
|
||||
|
||||
; TRACK
|
||||
FDC_TRACK EQU 0x21
|
||||
|
||||
; SECTOR
|
||||
FDC_SECT EQU 0x22
|
||||
|
||||
; DATA
|
||||
FDC_DATA EQU 0x23
|
||||
|
||||
;
|
||||
FDC_WAIT EQU 0x24
|
||||
|
||||
; Controller port
|
||||
FLOPPY EQU 0x25
|
||||
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР580ВВ55 DD78
|
||||
; -------------------------------------------------------
|
||||
; Port A - Keyboard Data
|
||||
KBD_DD78PA EQU 0x40
|
||||
|
||||
; Port B - JST3,SHFT,CTRL,ACK,TAPE5,TAPE4,GK,GC
|
||||
KBD_DD78PB EQU 0x41
|
||||
|
||||
; Port C - [PC7..0]
|
||||
KBD_DD78PC EQU 0x42
|
||||
|
||||
; Сonfig: [1][ma1,ma0][0-aO|1-aI],[0-chO,1-chI],[mb],[0-bO|1-bI],[0-clO,1-clI]
|
||||
; Set bit: [0][xxx][bbb][0|1];
|
||||
KBD_DD78CTR EQU 0x43
|
||||
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР580ВИ53 DD70
|
||||
; -------------------------------------------------------
|
||||
; Counter 1
|
||||
TMR_DD70C1 EQU 0x60
|
||||
|
||||
; Counter 2
|
||||
TMR_DD70C2 EQU 0x61
|
||||
|
||||
; Counter 3
|
||||
TMR_DD70C3 EQU 0x62
|
||||
|
||||
; Config: [sc1,sc0][rl1,rl0][m2,m1,m0][bcd]
|
||||
; sc - timer, rl=01-LSB, 10-MSB, 11-LSB+MSB
|
||||
; mode 000 - int on fin,
|
||||
; 001 - one shot,
|
||||
; x10 - rate gen,
|
||||
; x11-sq wave
|
||||
TMR_DD70CTR EQU 0x63
|
||||
|
||||
; Programable Interrupt controller PIC KR580VV59
|
||||
PIC_DD75RS EQU 0x80
|
||||
PIC_DD75RM EQU 0x81
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР580ВВ51 DD72
|
||||
; -------------------------------------------------------
|
||||
; Data
|
||||
UART_DD72RD EQU 0xA0
|
||||
|
||||
; [RST,RQ_RX,RST_ERR,PAUSE,RX_EN,RX_RDY,TX_RDY]
|
||||
UART_DD72RR EQU 0xA1
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР580ВВ55 DD17
|
||||
; -------------------------------------------------------
|
||||
; Port A - VShift[8..1]
|
||||
SYS_DD17PA EQU 0xC0
|
||||
|
||||
; Port B - [ROM14,13][REST][ENROM-][A18,17,16][32k]
|
||||
SYS_DD17PB EQU 0xC1
|
||||
|
||||
; Port C - HShift[HS5..1,SB3..1]
|
||||
SYS_DD17PC EQU 0xC2
|
||||
|
||||
; Сonfig: [1][ma1,ma0][0-aO|1-aI],[0-chO,1-chI],[mb],[0-bO|1-bI],[0-clO,1-clI]
|
||||
; Set bit: [0][xxx][bbb][0|1];
|
||||
SYS_DD17CTR EQU 0xC3
|
||||
|
||||
; -------------------------------------------------------
|
||||
; КР580ВВ55 DD67
|
||||
; -------------------------------------------------------
|
||||
; Port A - LPT Data
|
||||
LPT_DD67PA EQU 0xE0
|
||||
|
||||
; Port B - [VSU,C/M,FL3..1,COL3..1]
|
||||
VID_DD67PB EQU 0xE1
|
||||
|
||||
; Port C - [USER3..1,STB-LP,BELL,TAPE3..1]
|
||||
DD67PC EQU 0xE2
|
||||
|
||||
; Сonfig: [1][ma1,ma0][0-aO|1-aI],[0-chO,1-chI],[mb],[0-bO|1-bI],[0-clO,1-clI]
|
||||
; Set bit: [0][xxx][bbb][0|1];
|
||||
DD67CTR EQU 0xE3
|
||||
|
||||
ENDIF
|
||||
@ -1,35 +0,0 @@
|
||||
; ======================================================
|
||||
; Ocean-240.2
|
||||
;
|
||||
; Monitor entries to compile CP/M modules
|
||||
;
|
||||
; By Romych 2025-09-09
|
||||
; ======================================================
|
||||
|
||||
IFNDEF _MON_ENTRY
|
||||
DEFINE _MON_ENTRY
|
||||
|
||||
MODULE MON_ENTRY
|
||||
|
||||
mon_init EQU 0xe000
|
||||
mon_cold_start EQU 0xe003
|
||||
non_con_status EQU 0xe006
|
||||
mon_con_in EQU 0xe009
|
||||
mon_con_out EQU 0xe00c
|
||||
mon_serial_in EQU 0xe00f
|
||||
mpn_serial_out EQU 0xe012
|
||||
mon_char_print EQU 0xe015
|
||||
mon_tape_read EQU 0xe018
|
||||
mon_tape_write EQU 0xe01b
|
||||
ram_disk_read EQU 0xe01e
|
||||
ram_disk_write EQU 0xe021
|
||||
mon_res_f1 EQU 0xe024
|
||||
mon_res_f2 EQU 0xe027
|
||||
mon_tape_wait EQU 0xe02a
|
||||
mon_tape_detect EQU 0xe02d
|
||||
read_floppy EQU 0xe030
|
||||
write_floppy EQU 0xe033
|
||||
|
||||
ENDMODULE
|
||||
|
||||
ENDIF
|
||||
@ -1,209 +0,0 @@
|
||||
; =======================================================
|
||||
; Ocean-240.2
|
||||
; Module TM_VARS - Turbo monitor variables
|
||||
; RAM Range: 0xBA09-0xBFFF
|
||||
;
|
||||
; Disassembled by Romych 2025-09-09
|
||||
; =======================================================
|
||||
|
||||
IFNDEF _TM_VARS
|
||||
DEFINE _TM_VARS
|
||||
|
||||
MODULE TM_VARS
|
||||
ORG 0xBA09
|
||||
|
||||
bdos_compcol db 0
|
||||
bdos_strtcol db 0
|
||||
bdos_column db 0
|
||||
bdos_listcp db 0
|
||||
bdos_kbchar db 0
|
||||
bdos_entsp ds 42, 0 ; 0xba0e
|
||||
BYTE_ram_ba38 dw 0
|
||||
BYTE_ram_ba3a dw 0
|
||||
BYTE_ram_ba3c dw 0
|
||||
BYTE_ram_ba3e dw 0
|
||||
|
||||
; -------------------------------------------------------
|
||||
; Common values shared between bdosi and bdos
|
||||
; -------------------------------------------------------
|
||||
|
||||
; current user number
|
||||
bdos_usercode db 0x00 ; 0xba40
|
||||
|
||||
; current disk number
|
||||
bdos_curdsk db 0x00
|
||||
|
||||
; Information address
|
||||
bdos_info dw 0x0000 ; 0xba42
|
||||
|
||||
; address value to return
|
||||
bdos_aret dw 0x0000 ; 0xba44
|
||||
bdos_efcb db 0x00 ; 0xba46
|
||||
bdos_rodsk db 0x00 ; 0xba47
|
||||
BYTE_ram_ba48 db 0x00 ; 0xba48
|
||||
bdos_dlog dw 0x0000 ; 0xba49
|
||||
bdos_dmaad dw 0x0000 ; 0xba4b
|
||||
bdos_cdrmaxa dw 0x0000 ; 0xba4d
|
||||
bdos_curtrka dw 0x0000 ; 0xba4f
|
||||
bdos_curreca dw 0x0000 ; 0xba51
|
||||
bdos_buffa db 0x00 ; 0xba53
|
||||
BYTE_ram_ba54 db 0x00 ; 0xba54
|
||||
bdos_dpbaddr dw 0x0000 ; 0xba55
|
||||
BYTE_ram_ba57 dw 0x0000 ; 0xba57
|
||||
bdos_alloca dw 0x0000 ; 0xba59
|
||||
dbos_sectpt dw 0x0000 ; 0xba5b
|
||||
bdos_blkshf db 0x00 ; 0xba5d
|
||||
bdos_blmsk db 0x00 ; 0xba5e
|
||||
bdos_extmsk db 0x00 ; 0xba5f
|
||||
bdos_maxall dw 0x0000 ; 0xba60
|
||||
bdos_dirmax dw 0x0000 ; 0xba62
|
||||
bdos_dirblk dw 0x0000 ; 0xba64
|
||||
BYTE_ram_ba66 dw 0x0000 ; 0xba66
|
||||
bdos_offset dw 0x0000 ; 0xba68
|
||||
bdos_tranv dw 0x0000 ; 0xba6a
|
||||
bdos_fcb_copied db 0x00 ; 0xba6c
|
||||
bdos_rfm db 0x00 ; 0xba6d
|
||||
bdos_dirloc db 0x00 ; 0xba6e
|
||||
bdos_seqio db 0x00 ; 0xba6f
|
||||
bdos_linfo db 0x00 ; 0xba70
|
||||
bdos_dminx db 0x00 ; 0xba71
|
||||
bdos_searchl db 0x00 ; 0xba72
|
||||
bdos_searcha dw 0x0, 0x0 ; 0xba73
|
||||
bdos_single db 0x00 ; 0xba77
|
||||
bdos_resel db 0x00 ; 0xba78
|
||||
bdos_olddsk db 0x00 ; 0xba79
|
||||
bdos_fcbdsk db 0x00 ; 0xba7a
|
||||
bdos_rcount db 0x00 ; 0xba7b
|
||||
bdos_extval db 0x00 ; 0xba7c
|
||||
bdos_vrecord dw 0x0000 ; 0xba7d
|
||||
bdos_arecord db 0x00 ; 0xba7f
|
||||
BYTE_ram_ba80 db 0x00 ; 0xba80
|
||||
bdos_arecord1 dw 0x0000 ; 0xba81
|
||||
bdos_dptr db 0x00 ; 0xba83
|
||||
bdos_dcnt db 0x00 ; 0xba84
|
||||
bdos_dcnt_hi db 0x00 ; 0xba85
|
||||
bdos_drec ds 20, 0x00 ; 0xba86
|
||||
tmp_dir_total dw 0x0000 ; 0xba9a
|
||||
saved_stack_ptr ds 22, 0x00 ; 0xba9c
|
||||
WORD_ram_bab2 dw 0x0000 ; 0xbab2
|
||||
safe_stack_ptr dw 0x0000 ; 0xbab4
|
||||
|
||||
; --------------------------------------------------
|
||||
; FCB
|
||||
; --------------------------------------------------
|
||||
; FCB offset 0 - drive letter to write file
|
||||
ccp_FCB db 0x00 ; 0xbab6
|
||||
; filename to write file
|
||||
ccp_FCB_fn ds 31,0x00 ; 0xbab7
|
||||
|
||||
ccp_FCB_CR db 0x00 ; Current record
|
||||
cco_FCB_Rn db 0x00 ; Random access record number
|
||||
dw 0x00
|
||||
dw 0x00
|
||||
dw 0x00
|
||||
|
||||
DPH_base ds 78, 0x00 ; 0xbade
|
||||
cur_disk db 0x00 ; 0xbb2c
|
||||
dma_addr dw 0x0000 ; 0xbb2d
|
||||
curr_track db 0x00 ; 0xbb2f
|
||||
curr_sec db 0x00 ; 0xbb30
|
||||
slicer_disk db 0x00 ; 0xbb31
|
||||
slicer_track db 0x00 ; 0xbb32
|
||||
slicer_real_sector db 0x00 ; 0xbb33
|
||||
tmp_slicer_real_sector db 0x00 ; 0xbb34
|
||||
slicer_has_data db 0x00 ; 0xbb35
|
||||
slicer_need_save db 0x00 ; 0xbb36
|
||||
|
||||
slicer_uninited_count db 0x00 ; 0xbb37
|
||||
slicer_uninited_disk db 0x00 ; 0xbb38
|
||||
slicer_uninited_track db 0x00 ; 0xbb39
|
||||
slicer_uninited_sector_128 db 0x00 ; 0xbb3a
|
||||
tmp_slicer_result db 0x00 ; 0xbb3b
|
||||
tmp_slicer_can_read db 0x00 ; 0xbb3c
|
||||
tmp_slicer_operation db 0x00 ; 0xbb3d
|
||||
tmp_slicer_flush db 0x00 ; 0xbb3e
|
||||
ds 449, 0x00
|
||||
slicer_buffer ds 512, 0x00 ; 0xbd00
|
||||
|
||||
tm_stack ds 80, 0x00 ; 0xbf00 search text or buffer to search?
|
||||
tm_ltb ds 32, 0x00 ; 0xbf50
|
||||
tm_strt ds 16, 0x00 ; 0xbf70
|
||||
tm_track_no db 0x00 ; 0xbf80
|
||||
tm_sector_no db 0x00 ; 0xbf81
|
||||
tm_num_sect db 0x00 ; 0xbf82
|
||||
tm_disk_op db 0x00 ; 0xbf83
|
||||
tm_rw_disk db 0x00 ; 0xbf84
|
||||
tm_drive dw 0x00 ; 0xbf85
|
||||
tm_tbu db 0x00 ; 0xbf87
|
||||
|
||||
; user entered command buffer
|
||||
tm_hrg ds 48, 0x00 ; 0xbf88
|
||||
tm_stack_top dw 0x0000 ; 0xbfb8
|
||||
tm_stsp dw 0x0, 0x0, 0x0 ; 0xbfba
|
||||
rst_af_save dw 0x0000 ; 0xbfc0
|
||||
rst_bc_save dw 0x0000 ; 0xbfc2
|
||||
rst_de_save dw 0x00 ; 0xbfc4
|
||||
rst_hl_save dw 0x00 ; 0xbfc6
|
||||
rst_sp_save dw 0x0000 ; 0xbfc8
|
||||
rst_ret_JP db 0x00 ; 0xbfca
|
||||
rst_ret_addr dw 0x00 ; 0xbfcb
|
||||
db 0
|
||||
dw 0x00, 0x00
|
||||
tm_stack_0 dw 0x00, 0x00 ; 0xbfd2
|
||||
db 0x00 ; 0xbfd6
|
||||
dw 0x0000 ; 0xbfd7
|
||||
m_esc_mode db 0x00 ; 0xbfd9
|
||||
m_esc_cmd db 0x00 ; 0xbfda
|
||||
m_esc_param_cnt db 0x00 ; 0xbfdb
|
||||
m_esc_param_1 db 0x00 ; 0xbfdc
|
||||
m_esc_param_2 db 0x00 ; 0xbfdd
|
||||
m_esc_param_3 db 0x00 ; 0xbfde
|
||||
m_esc_param_4 db 0x00 ; 0xbfdf
|
||||
m_esc_hex_cmd db 0x00 ; 0xbfe0
|
||||
m_esc_param_6 db 0x00 ; 0xbfe1
|
||||
ds 4, 0x00 ; 0xbfe2
|
||||
m_screen_mode db 0x00 ; 0xbfe6
|
||||
m_cursor_row db 0x00 ; 0xbfe7
|
||||
m_cursor_col db 0x00 ; 0xbfe8
|
||||
m_curr_color dw 0x0000 ; 0xbfe9
|
||||
m_row_shift db 0x00 ; 0xbfeb
|
||||
m_codepage db 0x00 ; 0xbfec
|
||||
m_cur_palette db 0x00 ; 0xbfed
|
||||
m_beep_period dw 0x0000 ; 0xbfee
|
||||
m_beep_duration dw 0x0000 ; 0xbff0
|
||||
m_pix_shift db 0x00 ; 0xbff2
|
||||
m_strobe_state db 0x00 ; 0xbff3
|
||||
m_print_pos_x dw 0x0000 ; 0xbff4
|
||||
dw 0x0000
|
||||
dw 0x0000
|
||||
m_last_key db 0x00 ; 0xbffa
|
||||
m_last_shifts db 0x00 ; 0xbffb
|
||||
mc_fix_state db 0x00 ; 0xbffc
|
||||
mc_stored_key db 0x00 ; 0xbffd
|
||||
|
||||
ASSERT tm_stack_top = 0xbfb8
|
||||
ASSERT tmp_dir_total = 0xba9a
|
||||
ASSERT saved_stack_ptr= 0xba9c
|
||||
ASSERT WORD_ram_bab2 = 0xbab2
|
||||
ASSERT ccp_FCB_fn = 0xbab7
|
||||
ASSERT DPH_base = 0xbade
|
||||
ASSERT slicer_uninited_count = 0xbb37
|
||||
ASSERT slicer_buffer = 0xbd00
|
||||
ASSERT tm_stack = 0xbf00
|
||||
ASSERT tm_hrg = 0xbf88
|
||||
ASSERT rst_hl_save = 0xbfc6
|
||||
ASSERT rst_ret_addr = 0xbfcb
|
||||
ASSERT tm_stack_0 = 0xbfd2
|
||||
ASSERT m_esc_mode = 0xbfd9
|
||||
ASSERT m_screen_mode = 0xbfe6
|
||||
ASSERT mc_stored_key = 0xbffd
|
||||
|
||||
; DISPLAY " BYTE_ram_bfd2 is: ", BYTE_ram_bfd2
|
||||
; DISPLAY " m_esc_mode is: ", m_esc_mode
|
||||
; DISPLAY " rst_ret_addr is: ", rst_ret_addr
|
||||
; DISPLAY " tm_stack_top is: ", tm_stack_top
|
||||
; DISPLAY " mc_stored_key is: ", mc_stored_key
|
||||
|
||||
ENDMODULE
|
||||
|
||||
ENDIF
|
||||
9
ROMs/Sources/Test/.vscode/extensions.json
vendored
@ -1,9 +0,0 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"maziac.asm-code-lens",
|
||||
"maziac.dezog",
|
||||
"maziac.hex-hover-converter",
|
||||
"maziac.z80-instruction-set",
|
||||
"maziac.sna-fileviewer"
|
||||
]
|
||||
}
|
||||
94
ROMs/Sources/Test/.vscode/launch.json
vendored
@ -1,94 +0,0 @@
|
||||
{
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"type": "dezog",
|
||||
"request": "launch",
|
||||
"name": "Internal Simulator",
|
||||
"remoteType": "zsim",
|
||||
"zsim": {
|
||||
"visualMemory": true,
|
||||
"memoryModel": "CUSTOM",
|
||||
"customMemory": {
|
||||
"slots": [
|
||||
{
|
||||
"name": "PAGE0",
|
||||
"range": ["0x0000","0x3FFF"],
|
||||
"banks": [{"index": [0, 255]}],
|
||||
"initialBank": 0
|
||||
},
|
||||
{
|
||||
"name": "PAGE1",
|
||||
"range": ["0x4000","0x7FFF"],
|
||||
"banks": [{"index": [0, 255]}],
|
||||
"initialBank": 1
|
||||
},
|
||||
{
|
||||
"name": "PAGE2",
|
||||
"range": ["0x8000","0xBFFF"],
|
||||
"banks": [{"index": [0, 255]}],
|
||||
"initialBank": 2
|
||||
},
|
||||
{
|
||||
"name": "PAGE3",
|
||||
"range": ["0xC000","0xFFFF"],
|
||||
"banks": [{"index": [0, 255]}],
|
||||
"initialBank": 3
|
||||
}
|
||||
],
|
||||
"ioMmu": [
|
||||
"if (portAddress == 0x82) {",
|
||||
" bank = portValue;",
|
||||
" PAGE0 = bank;",
|
||||
"}",
|
||||
"if (portAddress == 0xA2) {",
|
||||
" bank = portValue;",
|
||||
" PAGE1 = bank;",
|
||||
"}",
|
||||
"if (portAddress == 0xC2) {",
|
||||
" bank = portValue;",
|
||||
" PAGE2 = bank;",
|
||||
"}",
|
||||
"if (portAddress == 0xE2) {",
|
||||
" bank = portValue;",
|
||||
" PAGE3 = bank;",
|
||||
"}"
|
||||
]
|
||||
},
|
||||
"customCode": {
|
||||
"debug": false,
|
||||
"jsPath": "sim/ports.js"
|
||||
//"uiPath": "simulation/ui.html"
|
||||
},
|
||||
//"ulaScreen": true,
|
||||
//"zxBorderWidth": 20,
|
||||
//"vsyncInterrupt": true,
|
||||
//"zxKeyboard": true,
|
||||
//"zxBeeper": true
|
||||
},
|
||||
"sjasmplus": [
|
||||
{
|
||||
"path": "test_O240.sld"
|
||||
}
|
||||
],
|
||||
"history": {
|
||||
"reverseDebugInstructionCount": 1000000,
|
||||
"spotCount": 10,
|
||||
"codeCoverageEnabled": true
|
||||
},
|
||||
"startAutomatically": false,
|
||||
"commandsAfterLaunch": [],
|
||||
"rootFolder": "${workspaceFolder}",
|
||||
"topOfStack": "STACK_TOP",
|
||||
"loadObjs": [
|
||||
{
|
||||
"path": "test_O240.obj",
|
||||
"start": "0x0000"
|
||||
}
|
||||
],
|
||||
"execAddress": "0x8100",
|
||||
"smallValuesMaximum": 513,
|
||||
"tmpDir": ".tmp"
|
||||
}
|
||||
]
|
||||
}
|
||||
41
ROMs/Sources/Test/.vscode/tasks.json
vendored
@ -1,41 +0,0 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "make (sjasmplus)",
|
||||
"type": "shell",
|
||||
"command": "sjasmplus",
|
||||
"args": [
|
||||
"--sld=test_O240.sld",
|
||||
"--sym=test_O240.labels",
|
||||
"--raw=test_O240.obj",
|
||||
"--fullpath",
|
||||
"test_O240.asm"
|
||||
],
|
||||
"problemMatcher": {
|
||||
"owner": "sjasmplus",
|
||||
"fileLocation": "autoDetect",
|
||||
"pattern": {
|
||||
"regexp": "^(.*)\\((\\d+)\\):\\s+(warning|error):\\s+(.*)$",
|
||||
"file": 1,
|
||||
"line": 2,
|
||||
"severity": 3,
|
||||
"message": 4
|
||||
}
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "start mame",
|
||||
"type": "shell",
|
||||
"command": "while true; do ./mame spectrum -window -debugger gdbstub -debug -debugger_port 12000 -verbose -resolution 512x384 ; sleep 2 ; done",
|
||||
"options": {
|
||||
"cwd": "${config:mame_dir}"
|
||||
},
|
||||
"problemMatcher": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,4 +0,0 @@
|
||||
# Компьютер "Океан-240.2"
|
||||
|
||||
Исходный текст тестового ПЗУ ПК "Океан 240.2" в мнемонике ассемблера Z80 в фомате sjasmplus.
|
||||
|
||||
BIN
preview.png
|
Before Width: | Height: | Size: 370 KiB After Width: | Height: | Size: 228 KiB |