Fix DD5 and DD22

This commit is contained in:
Роман Бойков 2026-03-10 21:11:51 +03:00
parent 9cbe555da5
commit 48112136b8
62 changed files with 868946 additions and 274799 deletions

View File

@ -1,6 +1,7 @@
# Компьютер "Океан-240.2"
Исходные файлы проекта схемы и печатной платы компьютера "Океан-240.2".
Как использовать:
В редакторе [EasyEDA](https://easyeda.com/editor), через "File" > "Open" > "EasyEDA Source", и выберите json файл и откройте его.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 486 KiB

124337
Export/SVG/CPU_v1.0.3.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 2.4 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 697 KiB

147066
Export/SVG/DRAM_v1.0.3.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 2.9 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 910 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 4.7 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 328 KiB

52537
Export/SVG/Power_v1.0.3.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.0 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 444 KiB

112286
Export/SVG/RAM_CTR_v1.0.3.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 2.2 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 205 KiB

39249
Export/SVG/Tape_v1.0.3.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 778 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 329 KiB

75145
Export/SVG/Video_v1.0.3.svg Normal file

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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)

View File

@ -1,4 +1,5 @@
# Океан-240.2 Персональный компьютер
Схема и печатная плата в KiCAD v9.0
Схема и печатная плата в [KiCAD](https://www.kicad.org/) v9.0
![Render](preview.jpg?raw=true "Render")

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 117 KiB

File diff suppressed because it is too large Load Diff

View File

@ -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": {

View File

@ -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\"",

View File

@ -38,4 +38,6 @@ __Программное обеспечение:__ монитор с графи
## Изменения
- В версии v1.0.1, Дизассемблированы обе микросхемы ПЗУ, на основе информации из полученных исходников, немного скорректирована схема и печатная плата.
- В версии v1.0.2, Микросхемы DD5 и DD22 на схемах и шелке KiCAD, ошибочно отмечены как ЛИ1. Ошибку заметил при сборке *felix*.
- В версии v1.0.3, Исправлены ошибки предыдущей версии. Документация в папке Export и герберы сгенерированы в KiCAD. Версия EasyEDA больше не будет дорабатываться.

View File

@ -1,11 +0,0 @@
*.labels
*.obj
*.OBJ
*.bin
*.BIN
*.tmp
tmp/
build/
*.lst
*.sld

View File

@ -1,9 +0,0 @@
{
"recommendations": [
"maziac.asm-code-lens",
"maziac.dezog",
"maziac.hex-hover-converter",
"maziac.z80-instruction-set",
"maziac.sna-fileviewer"
]
}

View File

@ -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"
}
]
}

View File

@ -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
}
}
]
}

View File

@ -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).

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

File diff suppressed because it is too large Load Diff

View File

@ -1,9 +0,0 @@
{
"recommendations": [
"maziac.asm-code-lens",
"maziac.dezog",
"maziac.hex-hover-converter",
"maziac.z80-instruction-set",
"maziac.sna-fileviewer"
]
}

View File

@ -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"
}
]
}

View File

@ -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": []
}
]
}

View File

@ -1,4 +0,0 @@
# Компьютер "Океан-240.2"
Исходный текст тестового ПЗУ ПК "Океан 240.2" в мнемонике ассемблера Z80 в фомате sjasmplus.

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 KiB

After

Width:  |  Height:  |  Size: 228 KiB