Quote:
а как на реале можно было делать poke? насколько помню (26 лет прошло), без ",R" загрузить можно было. Пропатчить - тоже. Но стартовый адрес оставался неизвестен и старт в тех 5 игрушках (30 минут кассеты) не совпадал с адресом загрузки!
Если игрушка не перетирает бейсик и служебные области, то проблем нет. Если перетирает, то нужен лишний шаг с загрузкой по смещению.
А вообще, поиск стартового адреса в своё время для меня был ещё тем развлечением

Из-за этого я и начал дизассемблировать программы и пытался догадываться - где же начало (копировщиков у меня не было тогда).
Code:
manual.lvv:
589.0196339 00001-01 35 01
Приложение 3
ПЕРСОНАЛЬНАЯ ЭВМ ПК-01 "ЛЬВОВ"
РУКОВОДСТВО ПРОГРАММИСТУ
│ BEA4/BEA5 │ 48804/48805 │ CODFL_ORG │ начало CODE-файла │
│ BEA6/BEA7 │ 48806/48807 │ CODFL_END │ конец CODE-файла │
│ BEA9/BEAA │ 48809/48810 │ CODFL_RUN │ старт CODE-файла │
│ BEAB/BEAC │ 48811/48812 │ OFFSET │ смещение CODE-файла │
Итого:
Code:
BLOAD "",,32768
PRINT PEEK(48809);" ";PEEK(48810)
И дальше уже думать что с этим делать, если программа грузится вне области бейсика, то:
Code:
BLOAD ""
PRINT PEEK(48809);" ";PEEK(48810)
Ну, а дальше уже можно делать правку, например:
Code:
POKE 23456, 255
И запускать:
Code:
DEF USR=12345:Q=USR(Q)
Есть ещё вариант, как сделал Константин Сливаков:
Code:
warez-d4.rar\ARCHIVE\GAMES.BIN\AEROCOBR.LVT
Тут маленькая программа в кодах, которая грузит и патчит основную, можно её взять за основу.
Code:
;
; BLOAD "36CE" 6FF9-707A,6FF9 CkSum: 0036CE
;
6FF9: 21 02 70 !.П START: lxi h, ON_ERROR
6FFC: 22 f1 be "?? shld $LOAD_ERR ; адр.перех. по ОШИБ.В/В (0BEF1h)
6FFF: cd 36 f8 ?6? LOOP: call @CLS ; 2.3.1 Очистка экрана (0F836h)
7002: 21 3b 70 !;П ON_ERROR: lxi h, MSG_BANNER
7005: cd a4 e4 ??? call @TEXT ; 2.2.7 Вывод на экран текстового сообщения (0E4A4h)
7008: cd 06 f8 ?.? call @KY* ; 2.2.2 Ввод символа без отработки специальных функций (0F806h)
700B: fe 31 -- ?1- cpi '1'
700D: ca 15 70 ?.П jz DO_LOAD
7010: fe 30 -- ?0- cpi '0'
7012: c2 ff 6f ??О jnz LOOP
7015: f5 -- -- ?-- DO_LOAD: push psw
7016: cd 36 f8 ?6? call @CLS ; 2.3.1 Очистка экрана (0F836h)
7019: 21 6a 70 !ЙП lxi h, MSG_CMD
701C: cd a4 e4 ??? call @TEXT ; 2.2.7 Вывод на экран текстового сообщения (0E4A4h)
701F: 21 8c be !?? lxi h, $SAVE_NAME ; имя файла запись/эталон (0BE8Ch)
7022: 11 70 70 .ПП lxi d, FILE_NAME
7025: 01 06 00 ... lxi b, 00006h
7028: cd 1f e1 ?.? call @MOVE ; 2.6.7 Перемещение массивов (0E11Fh)
702B: cd 94 dd ??? call @BLOAD ; 2.5.6 Прием кодового файла (0DD94h)
702E: f1 -- -- ?-- pop psw
702F: fe 30 -- ?0- cpi '0'
7031: ca 3e 9a ?>? jz 09A3Eh
7034: af -- -- ?-- xra a
7035: 32 b3 99 2?? sta 099B3h
7038: c3 3e 9a ?>? jmp 09A3Eh
703B: -------- --- MSG_BANNER DB 13, 'АВТОР СЛЫВАКОВ К.Г.', 13, 'НУЖНА ВЕЧНАЯ ЖИЗНЬ?(1/0)', 13, 0
706A: -------- --- MSG_CMD: DB 'BLOAD"'
7070: -------- --- FILE_NAME: DB 'AEROC1'
7076: -------- --- MSG_CMD_EN DB '",R', 13, 0
; lines: 29