И мне давно хотелось начать с Apple I !Lavr wrote:Ну что ж... модель 6502 окончательно проверена строгим тестом - можно что-либо и сделать на ней!

Тем более, что и делать-то особо ничего не пришлось - Apple I - это по сути компьютер,
который работает с терминалом, как PDP-8 примерно. Просто Возняк приделал очень простенький
терминал прямо на плату, чем, собственно, и сделал всем пользователям удобно.
Но, тем не менее, общается всё железо Apple I с внешним миром через БИС PIA 6820.
И во всём легендарном Woz Monitor-е - всего 2 процедуры общения с портами PIA:
Code: Select all
;-------------------------------------------------------------------------
; Subroutine to print a character to the terminal
;-------------------------------------------------------------------------
ECHO:
BIT DSP ; DA bit (B7) cleared yet?
BMI ECHO ; No! Wait for display ready
STA DSP ; Output character. Sets DA
RTS
;-------------------------------------------------------------------------
; Load KBD character from PIA
;-------------------------------------------------------------------------
NEXTCHAR:
LDA KBDCR ; Wait for key press
BPL NEXTCHAR ; No key yet!
LDA KBD ; Load character. B7 should be '1'
в коде Woz Monitor-а практически нет.
Поэтому я решил, что поскольку модели 6820 в Proteus нет, но есть успешно работающая
UART MC6850, причем процедуры работы с ним практически идентичны, разве что у PIA 6820
контролируют бит 7, а у MC6850 - биты 0 и 1, значит можно заменить эти процедуры в
коде Woz Monitor-а. Тем более, что с виртуальным терминалом работать гораздо удобнее,
нежели тыкать в виртуальные кнопочки.
Весь этот процесс воплотился в жизнь весьма удачно, и вот что получилось: Woz Monitor работает просто великолепно, все примеры работы с ним, взятые отсюда:
https://www.sbprojects.net/projects/apple1/wozmon.php
выполняет практически идентично, разве что вот в этом примере автор сайта ошибся:
40: A9 0 20 EF FF 38 69 0 4C 40 0 R
Code: Select all
Addr: HexDump Dissassembly
------+----------+---------------
$0040 A9 00 LDA #$00
$0042 20 EF FF JSR $FFEF
$0045 38 SEC
$0046 69 00 ADC #$00
$0048 4C 40 00 JMP $0040
в терминале Apple I, но, к сожалению, он аппаратный - в модели его нет.

Чтобы пример работал как задумано - выводил все символы на терминал - в конце должен
быть переход JMP $0042, вот так это будет правильно:
40: A9 0D 20 EF FF 38 69 00 4C 42 0 R
На скриншоте запущена игра "Жизнь" (Game_life.bin), которая вполне успешно работает.
Игры для Apple I я скачал вот здесь:http://www.callapple.org/soft/ap1/games.html
К сожалению, код игр приходится немного адаптировать, поскольку вывод на консоль они
делают через стандарный вызов Woz Monitor-а, а вот клавиатуру читают сами, поскольку
в Мониторе Возняка стандартной процедуры чтения кода с клавиатуры нет, что и неудивительно
для 254-х байт!

Поэтому игры дублируют вот эту процедру:
Code: Select all
NEXTCHAR:
LDA KBDCR ; Wait for key press
BPL NEXTCHAR ; No key yet!
LDA KBD ; Load character. B7 should be '1'

Я адаптировал кроме "Life" еще 2 игры: "Посади спутник" (Game_lunar.bin) и мини-шахматы
(Game_chess.bin).
Игры загружаются в ОЗУ через механизм ПДП при начальном старте проекта.
Для удобства я положил в архиве 3 проекта:
Apple_I.DSN - загружает Game_life.bin, старт из Монитора: 2000R
Apple_I_.DSN - загружает Game_lunar.bin, старт из Монитора: 300R
Apple_Ich.DSN - загружает Game_chess.bin, старт из Монитора: 300R
Архив проекта: Кроме того, в ПЗУ вместе с Монитором Возняка остался и OSI-BASIC.
Он запускается из Монитора вот так: FB00R, или нажатием кнопки NMI.
По адресу http://www.callapple.org/soft/ap1/games.html есть игры для Apple I и на Бейсике,
но я не проверял, работают ли они под OSI-BASIC.
Программы на BASIC можно загрузить в сам BASIC посредством "copy-paste" в окно терминала.
При старте любого из проектов вначале происходит загрузка в ОЗУ программы через ПДП.
Справа - один индикатор красный, второй под ним - мигает, обозначая процесс загрузки.
Далее управление получает Woz Monitor, он выводит " \ " и ждет ввода команд.
Три индикатора в проекте показывают, что процессор читает из памяти, что пишет в память
и что пишет в UART. В принципе - их можно безболезненно удалить вместе с регистрами,
и проект будет работать быстрее, но по ним неплохо видно, делает ли что-либо процессор
или просто завис...
Желаю приятного общения с этой простой репликой Apple I !
