Apple_I in Proteus

MOS Technology / Commodore / Apple II / NES etc.

Moderator: Lavr

User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Apple_I in Proteus

Post by Lavr »

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

Тем более, что и делать-то особо ничего не пришлось - 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'
Если не считать 4-х строчек настройки PIA 6820, больше никаких аппаратных зависимостей
в коде Woz Monitor-а практически нет.

Поэтому я решил, что поскольку модели 6820 в Proteus нет, но есть успешно работающая
UART MC6850, причем процедуры работы с ним практически идентичны, разве что у PIA 6820
контролируют бит 7, а у MC6850 - биты 0 и 1, значит можно заменить эти процедуры в
коде Woz Monitor-а. Тем более, что с виртуальным терминалом работать гораздо удобнее,
нежели тыкать в виртуальные кнопочки.

Весь этот процесс воплотился в жизнь весьма удачно, и вот что получилось:
Life2.gif
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
Из кода видно, что на терминал всегда выводится "$00" - это символ "@" - он ещё и курсор
в терминале Apple I, но, к сожалению, он аппаратный - в модели его нет. :-?

Чтобы пример работал как задумано - выводил все символы на терминал - в конце должен
быть переход JMP $0042, вот так это будет правильно:

40: A9 0D 20 EF FF 38 69 00 4C 42 0 R

На скриншоте запущена игра "Жизнь" (Game_life.bin), которая вполне успешно работает.

 Скриншот Game_life
Life1.gif

Игры для Apple I я скачал вот здесь:http://www.callapple.org/soft/ap1/games.html

К сожалению, код игр приходится немного адаптировать, поскольку вывод на консоль они
делают через стандарный вызов Woz Monitor-а, а вот клавиатуру читают сами, поскольку
в Мониторе Возняка стандартной процедуры чтения кода с клавиатуры нет, что и неудивительно
для 254-х байт! :kruto:
Поэтому игры дублируют вот эту процедру:

Code: Select all

NEXTCHAR:
                LDA     KBDCR         ;  Wait for key press
                BPL     NEXTCHAR      ;  No key yet!
                LDA     KBD           ;  Load character. B7 should be '1'
её приходится искать и патчить. :osad:

Я адаптировал кроме "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

Архив проекта:
Apple_I.zip
Кроме того, в ПЗУ вместе с Монитором Возняка остался и 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 ! :wink:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

ПРИЛОЖЕНИЯ к проекту Apple_I

Post by Lavr »

ПРИЛОЖЕНИЯ к проекту:

Описание The Woz Monitor, взятое с сайта https://www.sbprojects.net/projects/apple1/wozmon.php
на английском, с полным корректным переводом на русский.
The Woz Monitor.zip
Архив игр, скачанных с сайта http://www.callapple.org/soft/ap1/games.html :
A_Games.zip
На примерах из архива видно, как игры были адаптированы.
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Apple_I in Proteus

Post by Lavr »

Lavr wrote:... модели 6820 в Proteus нет, но есть успешно работающая
UART MC6850, причем процедуры работы с ним практически идентичны,
разве что у PIA 6820 контролируют бит 7, а у MC6850 - биты 0 и 1, ...
Приспичило мне в связи с этой вот идеей MC6850 попрограммировать...
А я и забыл, как это делается... :osad: Пришлось 8250 по-быстрому использовать. 8)
И как назло в этой ветке процедуру инициализации MC6850 я не выложил! :-?

На будущее выкладываю здесь архивчик, как MC6850 программировать, с примером
на ассемблере 6502.
Serial 6850.zip
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Apple_I in Proteus

Post by Lavr »

Lavr wrote:Apple I - это по сути компьютер, который работает с терминалом, как PDP-8 примерно.
Просто Возняк приделал очень простенький терминал прямо на плату, чем, собственно,
и сделал всем пользователям удобно.
Терминал Возняк сконструировал на сдвиговых регистрах 2504, как на наиболее доступном
в то время ОЗУ большого объёма.

Image

Ну и поскольку модель сдвигового регистра 2504 в Proteus, я написал:
2504_TEST.PNG
Sh_Register.zip
Можно будет попробовать как-нибудь собрать модель терминала Apple I от Возняка.

Полное описание этого терминала можно взять здесь в архиве:
Apple I VideoTerminal.zip
А полную схему Apple I и её описания - скачать здесь: https://www.sbprojects.net/projects/apple1/

В общем-то ничего выдающегося в терминале от Возняка, кроме компактности, собственно, и нет.
Но зато может получиться полностью ТРУ Apple_I in Proteus... :wink:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Apple_I in Proteus

Post by Lavr »

Lavr wrote:К сожалению, код игр приходится немного адаптировать, поскольку вывод на консоль они
делают через стандарный вызов Woz Monitor-а, а вот клавиатуру читают сами, поскольку
в Мониторе Возняка стандартной процедуры чтения кода с клавиатуры нет, что и неудивительно
для 254-х байт! :kruto:
Поэтому игры дублируют вот эту процедру:

Code: Select all

NEXTCHAR:
                LDA     KBDCR         ;  Wait for key press
                BPL     NEXTCHAR      ;  No key yet!
                LDA     KBD           ;  Load character. B7 should be '1'
её приходится искать и патчить. :osad:
Я долго искал игру "Ханойские башни" под компьютер с микропроцессором 6502, желательно вот как раз
Apple I, потому как на вывод он работает с терминалом по сути, да и сам по себе архи-прост...

"Ханойские башни" я так и не нашел, но нашел похожую игру на странице одного автора, похожа она лишь
тем, что работает с игровым полем на терминале, а я как раз хотел посмотреть, как это в условиях терминала пишут.
Как собрать Apple 1 и написать для него игру

И когда я собирался поработать с игрой выяснилась пренеприятнейшая вещь: ВСЕ ЭМУЛЯТОРЫ Apple I,
КОТОРЫЕ Я НАСОБИРАЛ В РАМКАХ ФОРУМА 65XX, НЕ РАБОТАЮТ ПОД WINDOWS 7
!!!
:esurprised:
(Кроме браузерных на JS, но с ними весьма трудно работать, а не играть в игры... :-? )

И вспомнил я тут, что есть у меня вот этот хитрый, не полностью совместимый с Apple I, эмулятор! :lol:

Игру пришлось подшаманить на процедуры ввода с терминала, они у меня отличаются от оригинального Apple I...

В итоге игра успешно запустилась на этой моей самоделке, и заиграла! :kruto:
GAME_2048.PNG
Вот тут-то я вдруг понял, что к своему удивлению я ничего не знаю про "GAME 2048"! :roll:
Пришлось про неё прочесть: https://ru.wikipedia.org/wiki/2048_(игра)
GAME-2048.PNG
Игра совсем не старая оказалась, написана она под браузеры, но кто хочет пощупать игру эту на тёплом, ламповом
Apple I - вот проект: :wink:
GAME2048.zip
В архиве: GAME2048.BIN - оригинальный файл под Apple I;
Game_2048.bin - файл пропатченный под мой здешний Apple I...


P.S. И с патчем пришлось голову поломать: я сразу сюда полез, но спустя время и мне было затруднительно,
что же конкретно патчить... :-? А искать надо сигнатуры D011, D010 и патчить вот такие участки кода
:

Code: Select all

$0415    AD 11 D0  LDA $D011  ;--- 20 D0 3F JSR $3FD0
$0418    10 FB     BPL $0415
$041A    AD 10 D0  LDA $D010  ;--- 20 F0 3F JSR $3FD0
Тут я снова удивился, а куда ведут: JSR $3FD0 и JSR $3FD0? у Apple I там ничего нет! :roll:
Но, как оказалось, у меня на этих адресах подпрограммы подмены PIA 6820 на UART MC6850! :lol:

Code: Select all

Addr:    HexDump   Dissassembly
------+----------+---------------
$3FD0    AD 00 A0  LDA $A000
$3FD3    29 01     AND #$01
$3FD5    C9 01     CMP #$01
$3FD7    D0 03     BNE $3FDC
$3FD9    A9 80     LDA #$80
$3FDB    60        RTS
$3FDC    A9 00     LDA #$00
$3FDE    60        RTS

$3FF0    AD 01 A0  LDA $A001
$3FF3    09 80     ORA #$80
$3FE4    60        RTS
Всё же различия между PIA 6820 и UART MC6850 есть, в 3 байта не заменишь...
Надеюсь, если мне ещё раз приспичит делать этот трюк, данный пост мне всё напомнит!
:kruto:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Apple_I in Proteus

Post by Lavr »

Lavr wrote:И вспомнил я тут, что есть у меня вот этот хитрый, не полностью совместимый с Apple I, эмулятор! :lol:
Вот только отладчика нет в моём хитром эмуляторе, потому как он полу-аппаратный... :-?

И я задумался, а не использовать ли эмулятор emu.exe? В нём нет Эпплов, но есть "Агат-7", а он -
"почти что" Apple II, по крайней мере так говорили... :wink:
И мне казалось, что даже PIA 6820 на своём месте! :o
Apple II memchart.jpg
Но, видимо, чтобы заюзать PIA 6820, к Apple II следует подключить терминал... :lol:
А Apple II - не для этого выдумывали! :ebiggrin:

Родные клавиатура и дисплей у него обслуживаются иначе, но ненамного сложнее...
Обслуживание клавиатуры - фактически один к одному влезает в патч по размеру:

Code: Select all

;--- Так - в Apple I:
$0417    AD 11 D0  LDA $D011
$041A    10 FB     BPL $0417
$041C    AD 10 D0  LDA $D010
$041F    8D E1 02  STA $02E1
$0422    60        RTS

;--- А так - в Apple II:
$0300:   AD 00 C0  LDA $C000; check for a keypress
$0303:   10 FB     BPL $0300; keep waiting
$0306:   29 7F     AND #$7F ; turn off bit 7 - в этой игре НЕ НУЖНО!
$0308:   8D 10 C0  STA $C010; clear the keyboard strobe
А для вывода на экран есть служебная функция "Монитора":
JSR $FDD7;--- этот адрес отличается у "Агат-7" от Apple II
Собственно, и для опроса клавиатуры служебная функция "Монитора" есть:
JSR $FD07;--- этот адрес отличается у "Агат-7" от Apple II
Но она моргает курсором, как привычная нам 0F803H.

Ещё одна засада нехорошая в том, что кодировка символов у Apple II - не совсем ASCII...
А у "Агат-7" и того хуже - ещё и русские символы впёрли, хотя в описании пишут, что почти КОИ-8... 8)

Вот вокруг этого всего и танцевал я с бубном, подправляя все косяки "грязными хаками", как Шаос любит говаривать! :esmile:
Но в итоге эта Игра-2048 на "Агат-7" у меня заработала! :kruto:
Game-2048.PNG
И даже - в реальном времени - зело пошустрее, чем в моём хитром эмуляторе!

Игру под "Агат-7" прилагаю в архиве, если вдруг кто взыграть возжелает: :wink:
GAME2048.zip
Запускаем emu.exe, выбираем в меню "Агат-7", удерживая ПРОБЕЛ, жмём мышью красную кнопочку RESET (как учили).
После курсора "*" набираем R:
*R[Enter]
В меню загрузки выбираем GAME2048.b
После загрузки:
*280G[Enter]

Я даже сам поиграл... минут 15... чем-то на "пятнашки" похоже... но "грязные хаки" - гораздо интереснее же! :ebiggrin:
Тем более, что эмулятор с отладчиком теперь имеется...

P.S. Под эмуляторами оригинального Apple II игра работать не будет - системные вызовы надо подправить...
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Apple_I in Proteus

Post by Lavr »

Lavr wrote:Ещё одна засада нехорошая в том, что кодировка символов у Apple II - не совсем ASCII...
А у "Агат-7" и того хуже - ещё и русские символы впёрли, хотя в описании пишут, что почти КОИ-8... 8)
Вот такой примерно странненький знакогенератор у "Агат-7":
Агат_таб.PNG
В интернете нигде не нашел его таблицу... :-?

После символа 81Н до 0С0Н у меня где-то вывод на экран срывается, видимо - спецсимвол попадается.
Не отследил код... лениво было... :neutral:

Кстати... полезную книгу по "Агат-7" мы упоминали здесь:
viewtopic.php?p=102344#p102344

Image

Но в ней местами ошибочки тоже имеются: путается автор между "Агат-7" и Apple II... :-?
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Apple_I in Proteus

Post by Lavr »

Lavr wrote:После символа 81Н до 0С0Н у меня где-то вывод на экран срывается, видимо - спецсимвол попадается.
Не отследил код... лениво было...
Решил отследить-таки поточнее, где спецсимволы попадаются...
А попадаются они в диапазоне от 80Н до 9FН.

В остальном знакогенератор вот такой у "Агат-7":
TESTascii.PNG
Вывод на экран служебной функцией Монитора COUT = $FDD7 (для "Агат-7").
Для Apple II эта функция: COUT = $FDED.
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Apple_I in Proteus

Post by Lavr »

Lavr wrote:Решил отследить-таки поточнее, где спецсимволы попадаются...
А попадаются они в диапазоне от 80Н до 9FН.
Официально по книге Мымрина интерпретируются следующие управляющие коды:
У-коды.PNG
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Apple_I in Proteus

Post by Lavr »

Lavr wrote:Официально по книге Мымрина интерпретируются следующие управляющие коды:
На самом деле:
8D - перевод строки; Это привычные всем 0DН, но со взведенным старшим битом.
ПЭВМ АГАТ_Руководство программиста 1989

И геометрия экрана "Агат-7" - это - совсем, совсем не Apple II (40x24)... :-?
TESTsize.png
Я немного тормознулся написать "Ханойские башни" под 6502 из-за этих несоответствий... :(
С одной стороны у Apple II в текстовом режиме вроде как официально цвета нет.
Должны быть лишь инверсия символа и мерцание...

Но у "Агат-7", получается, что цвет текста есть:
MARS1.png
С другой стороны многие примеры из книги Мымрина на emu.exe (aka "Агат-7") не работают.
Причем очевидно даже мне, что ошибки из-за несоответствия Apple II и "Агат-7".

Мне, собственно, и цвет-то не нужен, но изображение в символов в текстовом режиме "Агат-7"
какое-то блёкло-серое, а не ярко белое, как у Apple II: :-?

Image

Очевидно же, что текст у Apple II не цветной, но нормальный белый, если сравнить с "Агат-7":

Image
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Apple_I in Proteus

Post by Lavr »

Lavr wrote:С одной стороны у Apple II в текстовом режиме вроде как официально цвета нет.
Должны быть лишь инверсия символа и мерцание...
Но у "Агат-7", получается, что цвет текста есть:
Оказывается, всё на самом деле так и есть, потому как:
Агат не является клоном Apple II
TXTMODE.PNG
Это я поддался распространенному заблуждению, оказывается... :wink:

Но знакогенератор, выведенный на экран "Агат-7", с официальной версией тоже несколько не совпадает...
ZNGEN.PNG
Хотя в основных чертах - похож...

Image
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Apple_I in Proteus

Post by Lavr »

Lavr wrote:Я долго искал игру "Ханойские башни" под компьютер с микропроцессором 6502, желательно вот как раз
Apple I, потому как на вывод он работает с терминалом по сути, да и сам по себе архи-прост...
Все засады и неприятности я-таки преодолел, и написал игру "Ханойские башни" под компьютер с микропроцессором 6502! :wink:
И уже собрался я перенести код под эту самую модель Apple I, как вдруг обнаружил еще одну засаду,
и на этот раз, похоже, что непреодолимую... :(

Всё дело в том, что во встроенном терминале Возняка в Apple I, чтобы очистить экран, выдают в терминал
24 кода перевода строки - 0DH, и изображение просто выталкивают за экран, а потом рисуют новое.
Для игр это весьма некрасиво выглядит, но в Apple I из-за аппаратных особенностей другого
варианта просто нет. :-?

Я же рассчитывал на то, что в моей модели Apple I терминал пытается быть настоящим,
Term-1.png
поэтому поддерживает некоторые управляющие коды ASCII.

И хотя в файлах HELP терминала под Prоteus пишут:
The Virtual Terminal supports the ASCII control codes CR (0Dh), BS (0x08h) and BEL (0x07h).
All other codes including LF (0x0A) are ignored.
это не совсем правда... :-?

Я исследовал коды терминала вот в этом проекте и выяснил, что поддерживает он и некоторые другие
управляющие коды ASCII. В частности, по памяти мне казалось, что поддерживаются коды CURSOR HOME -
курсор в верхний левый угол экрана и очистка экрана + CURSOR HOME...

Я взял отсюда мой собственный проект, чтобы проверить это, и к большому сожалению выяснил, что насчет
кода CURSOR HOME я заблуждался... а вот очистка экрана + CURSOR HOME - такой управляющий
код ASCII, действительно, есть - 0CH.

Коды же 1CH и 1FH, на которые я рассчитывал - не работают... :-?

В общем, если перенести код игры "Ханойские башни" под эту модель Apple I, будет выглядеть хотя и
лучше, чем в оригинале у Возняка, но неприятно: экран моргнул черным, и нарисовались новые баши и т.д.
Код CURSOR HOME, на который я рассчитывал, такого эффекта не создавал бы... :neutral:
You do not have the required permissions to view the files attached to this post.
iLavr
User avatar
Lavr
Supreme God
Posts: 16676
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Game 2048

Post by Lavr »

Lavr wrote:...нашел похожую игру на странице одного автора, похожа она лишь
тем, что работает с игровым полем на терминале, а я как раз хотел посмотреть, как это в условиях терминала пишут.
Как собрать Apple 1 и написать для него игру
Надумал я на платформу "Денди" портировать эту игру "2048" и никак не смог найти её
исходник по всем своим флешкам, хотя точно помню, что делал её реверс-инжиниринг...

Сделал реверс заново, и пусть исходники здесь будут в тематической подборке.
Game2048src.zip
Программа хороша тем, что небольшая и практически аппаратно-независима.
Её удобно переносить по платформам 6502.
Но у оригинала стартовый адрес 0280Н очень неудобен для платформы NES-"Денди"... :-?
You do not have the required permissions to view the files attached to this post.
iLavr