|
nedoPC.orgCommunity for electronics hobbyists, established in 2002 |
|
[SDK] Старая тема про nedoPC SDK (август 2004)
Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Доковырял Теперь таргет называется spetsmx (также пришлось поправить spr_comp.c чтобы он понимал это слово) - при этом генерируется 2 файла - ${project}.CPU и ${project}.I80 для запуска в эмуляторе Шевцова (см. скриншот выше) - вот обновлённый скрипт DEFAULT.N: Теперь надо все остальные примеры оформить в том же виде, что и MAPGEN (т.е. в поддиректориях директория PRJ) и можно релизить nedoPC SDK v2.0
|
15 Jul 2024 00:11 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Вот ещё скриншотов с разных эмулей - мой эмулятор Ориона Orionix: Мой эмулятор Спринтера SprintEm: Эмулятор спектрума Fuse с TRD версией сборки (где шрифт nedoPC): Эмулятор спектрума Fuse с TAP версией сборки (где шрифт родной ZX): Ну и скриншот с моего эмулятора Pseudo-86RK я уже приводил на позапредыдущей странице:
|
15 Jul 2024 00:28 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Хотя я смотрю поддержка Специалиста у меня появилась 20 января 2002 года в RW1P2 v1.3 и Специалист там был ЧЁРНО-БЕЛЫМ т.к. запись в порт #FFF8 (адрес порта цвета в Специалисте-MX) была закомментирована! т.е. бинарник мог работать и в эмуляторе Шевцова и в эмуляторах обычного Специалиста, оставаясь чёрно-белым и там, и тут. Далее в RW1P2 v1.4 (12 июня 2002 года) у меня появился хитрый цвет записываемый по адресу #FFFE ( похоже на "восьмицвет" стандартного Специалиста как описано вот тут: viewtopic.php?p=103706#p103706 ) и в этот момент оно перестало работать в эмуляторе Шевцова, т.к. в MX по этому адресу находятся совсем другие штуки! Далее оно жило с записью в #FFFE пока я вчера не сделал обычный полноцвет MX (4-битный цвет символов и 4-битный цвет фона) и не вернул запись цвета в #FFF8 - теперь оно снова работает в эмуляторе Шевцова, но НЕ работает в обычном Специалисте - наверное я оставлю эту новую платформу spetsmx как есть сейчас, но верну обычный spets который по-умолчанию будет чёрно-белый, как было в версии 1.3, а "пятицвет" или "восьмицвет" можно будет включить программно, если нужно (т.к. информация о цвете будет оставаться в бинарнике спрайтов)... P.S. Хотя нет - у меня всё-таки был реализован "пятицвет": но сильно выборочный - только если основные цвета заданы оно конвертирует - надо будет переписать... P.P.S. Вернул spets отключив в нём цвет - вот так это выглядит в эмуляторе Шевцова:
|
15 Jul 2024 17:34 |
|
|
shiny
Maniac
Joined: 14 Oct 2023 06:59 Posts: 292
|
неплохо и обновить DOSBox до 0.74.3
_________________ uselessretro.blogspot.com
|
15 Jul 2024 20:04 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
ну уж какой дебиян даёт такой и юзаю
|
15 Jul 2024 20:07 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
В данном случае всё выглядит более-менее прилично только потому, что в описателе спрайтов/тайлов стоит спецкоммент ! у тех квадратиков, которые надо инвертировать в случае сборки для чёрно-белого варианта | | | | Code: ;8x8-2/16
SP_E DB #55,#AA,#55,#AA,#55,#AA,#55,#AA,#F0 ;.! SP_H DB #55,#BE,#7F,#FE,#7F,#FE,#7D,#AA,#F0 ;O! SP_S DB #00,#2A,#54,#2A,#54,#2A,#54,#00,#07 ;@ SP_B DB #00,#54,#7E,#54,#54,#7E,#54,#00,#30 ;#! SP_R DB #00,#76,#6E,#42,#7A,#56,#4E,#00,#CE ;* SP_F DB #55,#AA,#5D,#BE,#5D,#AA,#55,#AA,#CE ;+ SP_R0 DB #18,#7E,#7E,#3C,#3C,#7E,#7E,#00,#40 ;R! SP_0 DB #00,#00,#00,#00,#00,#00,#00,#00,#00 ; SP_1 DB #00,#00,#00,#00,#00,#00,#00,#00,#11 ;.!
| | | | |
P.S. А буква сразу после ; в каждой строчке это для текстового варианта сборки:
|
16 Jul 2024 00:16 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Планы на ближайшее будущее: - поддержать компьютер Башкирия-2М - поддержать компьютер ПК-01 Львов - поддержать хакадей-суперкон-бейдж 2022 года с 4-битным эмулируемым процом viewtopic.php?f=92&t=21961- добавить правила для i8086 и поддержать сборку COM-файлов для DOS - дободать правила для m68k и дописать поддержку пальмов? - допилить таки работу с файлами? - может быть RC2014?... - режим высокого разрешения в ATM Turbo2+???...
|
16 Jul 2024 00:38 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
> допилить таки работу с файлами? Наверное надо выкинуть нафиг старую реализацию работы с файлами через каналы (да и сами каналы выкинуть тоже) - оно сейчас всё-равно только для системы speccy существует в виде SPECCY_.A (с подчёркиванием) в мнемониках Z80 и мнемониках 8080 (RASM) - вот как этот API описан в ROBBY.R (@P2_... это команды вызываемые через COMMAND): и ROBBY.R опять же облегчится...
|
16 Jul 2024 22:10 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
| | | | Shaos wrote: Переосмысливая идеи 2014 года можно предложить следующее Пакет с именем файла - это массив слов, в первом слове которого указано количество следующих далее букв и сейчас поддерживается только чтение (например в Circuits.CC): "filename" - прочитать текст из файла с именем filename, разместив его начиная с адреса #8000 по одной букве на слово, причём количество скопированных букв приходит в ответе от @filesystem По аналогии добавляем: "filename!" - записать буфер в файл с именем filename, причём пишем только младшие байты и останавливаемся, когда встретили ноль "filename%" - прочитать двоичный файл, упаковав байты по 2 в слово (от системы придет прочитанный размер в байтах) "filename%hhh" - записать двоичный файл с байтовым размером hhh (шестнадцатиричное число) пользуясь словами из буфера (если размер нечётный, то из последнего слова возьмется только младший байт) "filename+" - дополнить текстовый файл строкой из буфера (буква на слово, писать до нуля) - хотя может быть проще say перенаправить в файл... Работу с произвольным адресом пока можно отложить на будущее, но уже можно считать, что там в систему будут передаваться не строки, а структуры - с адресом, длиной, смещением внутри файла и т.д. P.S. Скелет программы (вырезка из TERNARO.R): P.P.S. На самом деле просто имя файла это чтение текстового файла где через запятую идут целые числа со знаком (обычно 16-битные т.е. signed short) и именно эти значения записываются в память при чтении из файла - одно значение на ячейку. Соответственно чтобы читать произвольный текстовый файл надо вводить спец.символ - например $ т.е. запросив чтение из файла filename$ мы читаем его как текстовый по одной букве на ячейку (по идее так можно и UTF8 читать, разворачивая его в полноценный 16-битный Unicode)... | | | | |
Наверное отрицательную область памяти надо сделать read-only - программа оттуда сможет только читать и соответственно запись в файл будет не оттуда, а из произвольного массива - т.е. надо будет указывать не только размер, но и адрес: filename - прочитать файл как массив слов (обинаризированный?) filename$ - прочитать файл как текстовый (возможна поддержка юникода) filename% - прочитать файл как последовательность байтов, где каждый байт будет хранится в одном слове (прочитать ограниченное количество байт? прочитать со смещением?) filename<AL - записать в файл массив слов начиная с адреса A и длиной L filename$<AL - записать в файл текст из массива с адресом A и длиной L filename%<AL - записать в файл массив байтов взятых из слов начиная с адреса A и длиной L и видимо надо добавить возможность "дописать": filename<<AL - дописать в файл массив слов начиная с адреса A и длиной L filename$<<AL - дописать в файл текст из массива с адресом A и длиной L filename%<<AL - дописать в файл массив байтов взятых из слов начиная с адреса A и длиной L и может быть даже добавить возможность дописывать в файл с определённого места? filename<<<ALO - дописать в файл массив слов начиная с адреса A и длиной L начиная со смещения O внутри файла filename%<<<ALO - дописать в файл массив байтов взятых из слов начиная с адреса A и длиной L начиная со смещения O внутри файла (но для текста в юникоде это не пройдёт т.к. размер файла может не соответстовать количеству символов и смещение нельзя будет вычислить корректно - поэтому filename$ будет писаться либо сначала < либо с конца <<) P.S. я о чём-то таком уже размышлял 10 лет назад: viewtopic.php?p=116548#p116548P.P.S. да - удаление файла можно сделать через filename! P.P.P.S. в системах без файловых осей должна быть возможность иметь read-only файлы в памяти, обращаясь к ним тем же самым способом...
|
16 Jul 2024 23:35 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Начал добавлять бестайловые тесты в PRJ/TESTS - вот первый тест 0001.R: Он компилируется только для radio с помощью простейшего N-скрипта PRJ/TESTS/DEFAULT.N: (запуск компиляции через NEDOMAKE PRJ/TESTS 0001) Результат работы теста: Я планирую запускать такие тесты в автоматическом режиме через stdout и сравнивать вывод с эталоном - так CI/CD будет проверять, что ничего не сломалось после заливки нового кода в репу (кстати ДЕФ будет печататься только на Радио-86РК, а на других платформах на этом месте будет def, но в данном случае я тестирую именно РК).
|
18 Jul 2024 00:31 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Как можно видеть в robbycc появилась опция -I_FONT которая означает игнорировать либу _FONT.A (в которой находится шрифт nedoPC) т.к. radio не печатает растровым шрифтом, а использует текстовый режим. Но если эту опцию опустить, то ничего страшного не произойдёт - просто в выходном коде будет сидеть шрифт, который не используется. В тексте робота text "..." означает вставку комментария в ассемблерный исходник, который генерируется при сборке - это я ещё в 2006 году придумал (в незарелизенной версии RW1P2 v1.x) чисто для отладки - под спойлером можно поглядеть этот получившийся ассемблерный текст: 0001.A | | | | Code: \ Generated by ROBBYCC v2.0.2 (Jul 18 2024) \ Part of nedoPC SDK, see http://www.nedopc.org/nedopc/SDK
ORG #0000 @BASE EQU #4000 @REGS EQU #405E @REG_X EQU #405E @REG_Y EQU #4060 \REG_D @REG_N EQU #4064 \REG_K @REG_R EQU #4068 @REG_T EQU #406A \REG_E \REG_M \REG_I @REG_A EQU #4072 @REG_B EQU #4074 @REG_C EQU #4076 \REG_P @REG_L EQU #407A \REG_S @RAND EQU 1000 JMP HEADER \ DATA _L_BASE DW @BASE _L_REGS DW @REGS _L_STAK DW @REGS CHX DB 0 CHY DB 0 CHS DB 4 CHB DB 0 _NPLANE DW 0 _ANGLE DB 0 _COLOR DB 0 _CURX DB 0 _CURY DB 0 _SAYX DB 0 _SAYY DB 0 _SAYC DB 0 _ATRS DB 0 HEADER: \ INIT SYSTEM CALL INIT \ SET SAY VARIABLES XRA_A STA _SAYX MVI_A, @DY DCR_A STA _SAYY MVI_A, 2 CALL ATTRIB STA _SAYC \ CLEAN FROM BASE TO REGS+32 LHLD _L_BASE XCHG LHLD _L_REGS LXI_B, 32 DAD_B XCHG MVI_C, 0 _STD_1: MOV_M,C INX_H MOV_A,H CMP_D JNZ _STD_1 MOV_A,L CMP_E JNZ _STD_1 \ SET SP & SAVE RETADDR POP_D LHLD _L_STAK SPHL PUSH_D _START: \ *0x66 _j0000: \ <><><><><><><><><><> MAIN-BEGIN \ *0x01 %w1 %w2 _j0021: \ DEF1 is empty operation \ *0x02 %w1 %w2 %w3 _j0026: LHLD _L_BASE LXI_D, #0005 DAD_D DAD_D LXI_D, #0064 MOV_M,E INX_H MOV_M,D INX_H LXI_D, #0065 MOV_M,E INX_H MOV_M,D INX_H LXI_D, #0066 MOV_M,E INX_H MOV_M,D INX_H \ *0x40 _j0033: \ 0xF5 PUSH_H LXI_H, #FF0A \ 0xF5 PUSH_H LXI_H, #0005 \ 0xF4 POP_D XCHG MVI_A, #FF CMP_H JNZ _l0001 \ REGISTER CALL _R_SET JMP _l0002 _l0001: \ VARIABLE CALL _B_SET _l0002: POP_H \ *0x40 _j003C: \ 0xF5 PUSH_H LXI_H, #FF0B \ 0xF5 PUSH_H LXI_H, #FF0A \ 0xF5 PUSH_H LXI_H, #0000 \ 0xF6 POP_D MVI_A, #FF CMP_D JNZ _l0003 PUSH_H MOV_L,E CALL _R_GET POP_D _l0003: DAD_D \ 0xF3 MVI_A, #FF CMP_H JNZ _l0004 \ REGISTER CALL _R_GET JMP _l0005 _l0004: \ VARIABLE CALL _B_GET _l0005: \ 0xF4 POP_D XCHG MVI_A, #FF CMP_H JNZ _l0006 \ REGISTER CALL _R_SET JMP _l0007 _l0006: \ VARIABLE CALL _B_SET _l0007: POP_H \ *0x40 _j004A: \ 0xF5 PUSH_H LXI_H, #FF0C \ 0xF5 PUSH_H LXI_H, #FF0A \ 0xF5 PUSH_H LXI_H, #0001 \ 0xF6 POP_D MVI_A, #FF CMP_D JNZ _l0008 PUSH_H MOV_L,E CALL _R_GET POP_D _l0008: DAD_D \ 0xF3 MVI_A, #FF CMP_H JNZ _l0009 \ REGISTER CALL _R_GET JMP _l0010 _l0009: \ VARIABLE CALL _B_GET _l0010: \ 0xF4 POP_D XCHG MVI_A, #FF CMP_H JNZ _l0011 \ REGISTER CALL _R_SET JMP _l0012 _l0011: \ VARIABLE CALL _B_SET _l0012: POP_H \ *0x37 _j0058: CALL _SAY \ SAY '&FF0A &FF0B &FF0C #&FF0A #&FF0B #&FF0C $&0005 ' LXI_H, #FF0A CALL _R_GET CALL _SAY1 MVI_C, #20 CALL _SAY0 LXI_H, #FF0B CALL _R_GET CALL _SAY1 MVI_C, #20 CALL _SAY0 LXI_H, #FF0C CALL _R_GET CALL _SAY1 MVI_C, #20 CALL _SAY0 MVI_C, #23 CALL _SAY0 LXI_H, #FF0A CALL _R_GET CALL _SAY2 MVI_C, #20 CALL _SAY0 MVI_C, #23 CALL _SAY0 LXI_H, #FF0B CALL _R_GET CALL _SAY2 MVI_C, #20 CALL _SAY0 MVI_C, #23 CALL _SAY0 LXI_H, #FF0C CALL _R_GET CALL _SAY2 MVI_C, #20 CALL _SAY0 CALL _V_B2B LXI_D, #0005 LXI_H, #0000 CALL _ARADR CALL _SAY3 MVI_C, #20 CALL _SAY0 \ *0x66 _j0088: \ <><><><><><><><><><> MAIN-END \ *0x33 _j00A7: RET \ *0xFF _j00A8:
+/home/shaos/src/SDK-work/LIB/I8080/_STD +/home/shaos/src/SDK-work/LIB/I8080/RADIO +/home/shaos/src/SDK-work/LIB/I8080/_CLIB +/home/shaos/src/SDK-work/LIB/I8080/_VARS +/home/shaos/src/SDK-work/LIB/I8080/_SAY +/home/shaos/src/SDK-work/LIB/I8080/NULL_
| | | | |
(и инклуд файла со шрифтом _FONT отсутствует в списке инкдуов в конце из-за новой опции) P.S. В настоящий момент есть проблемка с зависимостями - файл _FONT.A включается если в программе использовалась команда SAY, однако подпрограмма PUTCH печатающая букву из шрифта 8х8 находится в системном ассемблерном файле - SPETS.A или там ORION.A - и если пытаться собрать программу без SAY для графических платформ (тех же SPETS или ORION), то будет ошибка ассемблера т.к. метка FONT8X8 не найдена - надо подумать как эту подпрограмму PUTCH обобщить для разных платформ и вставить в _SAY.A - там специфические вещи только для атрибутов цвета, поэтому должно быть решаемо т.к. у меня уже есть системные подпрограммы конверсии цвета - RGB и ATTRIB. P.P.S. Похоже придумал как победить эту проблемку с зависимостями - заодно у пользователя появится возможность подключать свой собственный шрифт 8x8
|
18 Jul 2024 00:36 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Подкрутил чуток свой переупрощённый сишный препроцессор minicpp, чтобы он мог принимать предопределённые макросы из командной строки и появилась возможность заиметь роботов с условной компиляцией внутри чтобы такого робота собрать скажем для ориона без счётчика надо в досе выполнить следующую команду (ну т.е. как обычно): nedomake prj\random orionа чтобы со счётчиком: nedomake prj\random orion counterв линуксе немного покучерявей: $(pwd)/nedomake PRJ/RANDOM orion counter(это я расширяю дефолтный скрипт сборки DEFAULT.N чтобы он умел всё на свете - он теперь 240 строк длиной)
|
18 Jul 2024 23:17 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Вот тот же самый бинарник запущенный в Emu80: Получается 10000 тайлов случайно вывелось за 2м13с или 133 секунды, что значит порядка 75 тайлов в секунду - небыстро получается с высокоуровневым рандомом - вот эта функция вызывается 3 раза на каждый тайл: P.S. Перешёл на внутренний рандом, написанный на ассемблере (через чтение псевдопеременной R которая с точки зрения Robby-программиста всегда возвращает новое псевдослучайное число по той же самой формуле, но написанной на ассемблере) и стало быстрее - 10000 тайлов за 1м40с или 100 секунд, что значит порядка 100 тайлов в секунду (ускорение на 33%):
|
19 Jul 2024 00:44 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
надо эту математику переписать "из головы" т.к. я хочу все либы сделать PUBLIC DOMAIN, а эта штука была чуть ли не шареваре: | | | | Code: --------- Small-C User Registration (June 1, 1985) ----------- The Small-C compiler is copyrighted material and all rights are reserved by the author. You may use Small-C in any way you please, except that you may not sell copies without a signed agreement from the author. You are encouraged, however, to distribute copies freely so long as you charge no more than your actual costs for just media, packaging, and postage. You must retain all copyright notices and inform the recipient of his obligation to the author (next paragraph). These terms apply to both source and object Small-C files. If you received a "free" copy of this package (as described above), you are obliged to send a royalty payment of $20 to the author, J. E. Hendrix. Besides satisfying a moral debt, you will be supporting further development of Small-C and related software. Be sure to include a copy of this registration form so you can be informed of future developments. This software carries no warranty, either written or implied, regarding its performance or suitability to any particular task. Neither the author nor the distributor accepts any responsibility for losses which might derive from its use. Any correspondence requiring a reply must include a self-addressed, stamped envelope. NAME: __________________________________ DATE: ___________ ADDRESS: ____________________________________________________ ____________________________________________________ ____________________________________________________ COMPUTER: __________________________________ OP SYS: _________ I RECEIVED MY COPY OF SMALL-C FROM: __________________________ Mail to:
J. E. Hendrix Box 8378 University, MS 38677 U.S.A. "The Small-C Handbook" by J. E. Hendrix (Reston Publishing, 1984) provides complete documentation for the Small-C compiler. Individual copies can be obtained from the author. Dealers should direct inquiries to Prentice-Hall, 200 Old Tappan Road, Old Tappan, NJ 07675.
| | | | |
P.S. Про замену математики завёл новую тему: viewtopic.php?f=46&t=22486 (я наверное новые практически реализуемые в SDK вещи буду описывать в новых темах с префиксом [SDK], а эту тему я переименовываю из "nedoPC SDK" в "[SDK] Старая тема про nedoPC SDK (август 2004)", в которой планирую обсуждать теоретические вещи и планы на будущее)
|
19 Jul 2024 20:28 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 23468 Location: Silicon Valley
|
Я тут размышлял на досуге и подумал, что в будущем надо будет отходить от способа привязки к адресам, который я использую с 2001 года - это когда при сборке программы в SDK задаются три адреса: - адрес спрайтов/тайлов ($aspr)
- адрес оттранслированного кода ($abin)
- адрес памяти переменных ($avar)
т.к. с одной стороны между ними могут быть дыры (что заметно в бинарнике, где сидит то, что будет копироваться в память спрайтов и в память кода, а память переменных всегда создаётся заново при старте программы и поэтому в собираемый бинарник не попадает), а с другой стороны эти блоки (блок спрайтов, блок кода и блок переменных) могут случайно залезть друг на друга и существующие средства сборки из SDK этого не заметят, однако собранная программа нормально работать не будет. Для начала можно предусмотреть окно в блоке кода, куда будут потом вставлены спрайты (т.к. в момент компиляции кода уже известно сколько у нас спрайтов), а далее можно предусмотреть расположение блока переменных непосредственно следом за откомпилированным кодом, правда прямо сейчас это невозможно т.к. в момент компиляции адрес расположения переменных (и регистров) должен уже быть известен, а он не может быть известен если мы хотим переменные расположить следом за кодом т.к. для этого надо знать размер кода. Можно конечно скомпилировать код дважды - первый раз с переменными где попало, а уже второй раз, когда размер получившегося кода уже известен с первого прогона, можно перекомпилировать код второй раз уже с правильными адресами. А можно пойти ещё дальше и сделать более универсальное решение - компилировать всё в перемещаемый с шагом 256 байт код по типу как я делал в DLL для Спринтера или как планировал перемещать EXE-файлы при загрузке в ShaOS - с таблицей корректировки BITMAP занимающей 1/8 от размера кода, которая помечает битами какие байты кода требуют модификации при переносе кода в памяти (аналогично программы в MSX-DOS перемещали себя в верхние адреса - помню я в 90х чего-то такое дизассемблировал). Причём можно сделать 2 таблицы - для перемещения кода и для перемещения данных (в данном случае блока переменных и регистров языка Robby, а рабочие ячейки скомпилированного кода останутся с кодом), чтобы код и данные могли теоретически находиться где угодно в памяти, в том числе располагаясь плотно друг за другом (настолько плотно насколько позволяет шаг перемещения в 256 байт). Применительно к Радио-86РК такой подход был описан в статье "О перемещении программ в машинных кодах" из журнала Радио №3 за 1989 год (автор Г.Штефан). Причём там даже вариант с двумя BITMAP-таблицами упоминался для кода и для данных (а для перемещения экранной области предлагалась третья таблица, но это наверное уже перебор) с описанием алгоритма как такие таблицы BITMAP получать (для двух таблиц достаточно оттранслировать программу 3 раза). Также там приводились 2 дампа подпрограмм - одна которая может готовить такую BITMAP-таблицу (BITF2) и вторая которая может корректировать код по такой BITMAP-таблице (BIТCOR). P.S. Такой "вдвойне перемещаемый" формат может использоваться в nedoPC SDK например для сохранения промежуточных "объектных" файлов, которые могут объединяться с другими программами на бинарном уровне без перекомпиляции - у меня ведь есть возможность собирать код не привязанный к какой-то системе - если в ROBBYCC не задать опцию -S определяющую систему, то будет выбрана система NULL и при сборке будет подключен файл-пустышка NULL.A в котором не определена ни одна системная подпрограмма: Такой робот не будет иметь возможности принимать что-то с клавиатуры или выводить что-то на экран, но сможет обмениваться сообщениями через SEND[P] и RECV[P] (если я придумаю как связать разных роботов каналами связи), а также сможет выполнять манипуляции со своими переменными, которые могут быть "перемещены" в область переменных другого робота и они оба смогут использовать этот блок как shared memory (в данный момент такой NULL-робот будет одноразовым - на него можно передать управление, он что-то поделает и вернёт управление через RET, т.е. пока никакой кооперативной многозадачности с очередями обмена сообщениями, но теоретически и это можно реализовать)...
|
21 Jul 2024 21:18 |
|
|
Who is online |
Users browsing this forum: No registered users and 3 guests |
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot post attachments in this forum
|
|