Вход для пользователей

You are here

Micro-Professor II (MPF II)

На местном интернет-аукционе подвернулся ретро-клон Apple-II под названием Microprofessor II (MPF II), в таком вот комплекте:
mpf-ii

Для 1983 года вполне неплохая машинка, с полноценной (в отличие от цвет на 8х8 точек в Спектруме) графикой UPDATE: не совсем полноценная, как оказалось (см.ниже):

CPU: MOS Technology 6502
    Clock rate: 1 MHz
    RAM: 64 KB (including 16KB RAM mapped at the same address as the ROM)
    ROM: 16 KB (12 KB of which is a BASIC interpreter)
    Text modes: 40×24 (using graphics mode)
    Graphics modes: 280×192
    Colours: 8 colours
    Sound: 1 channel of 1-bit sound
    Connectors: Keyboard, Printer, Expansion port, cassette recorded input and output, Composite and TV-out
    Optional peripherals: 55 key full-size keyboard, Floppy disc drive, Thermal and Dot-matrix printers, Joystick
    Power supply: External PSU, 5,12V

Распакован:
unpack

При помощи встроенного Монитора прочитан байт из адреса 0xF800:
Monitor

Листинг программы, вызывающей подпрограмму Монитора, которая выводит 26 букв латинского алфавита:
list

Ну, и встроенный BASIC (не с токенами, как в Спектруме):
basic
lines

Графические возможности дисплея в режиме большого разрешения не позволяют адресовать цвет индивидуального пикселя:
Color

Внешняя клавиатура и блок питания имеют основу и корпус, сделанные из металла. Ощущения после современной техники незабываемые.

Мечта о "железном" процессоре 6502, чтобы потрогать за ассемблер, сбылась.

Комментарии

Интересно, насколько правда, что на 1МГц может быть производительнее Z80 на 3.57 Мгц

Здесь один из проектов проект хобийного компьютера на W65C02S6TPG-14
http://www.dourish.com/projects/mite.html

P.S. http://www.bjars.com/sourcecode.html исходники Atari 2600 игр (одна из них Hat Trick - хоккей на двоих на Forth :)
на github тоже есть ассемблерные игры
для 6502 есть разные Форт и Бейсики

Enterprise 128 (Z80) - BASIC vs Forth vs Turbo Pascal https://www.youtube.com/watch?v=U15I5a12fyA

Изображение пользователя Vitasam.

Да, ради процессора и зацепился за этот лот. Хочу попробовать Асм в "железном" варианте.
Форт и Си, если есть, хотелось бы попробовать тоже.

Идеально было бы найти контроллер флоппи для этого компа, но, скорее всего, нереально

Изображение пользователя Vitasam.

Оказывается, графика не совсем полноценная - цвет индивидуального пикселя в "свободном порядке" не указать:
pixels

Это же графический режим Apple 2, правильно? Или что-то, уникальное для клона?

Да это правда 6502 на 1МГц будет быстрее чем Z80 на 2.5МГц. 6502 на 1.25МГц (что все еще штатно) будет быстрей чем Z80 на 4 МГц. Оригинальная система команд с удобной адресацией, простые команды (пересылок) за два такта (декодер команд довольно интересный), команды загрузки и выгрузки за счет адресации в нулевой странице ускоряются до 3 тактов, с адресацией по полному 16 битному адресу - 4 такта. Z80 конечно помню довольно смутно, но ЕМНИП там 4 такта это маш. цикл, а за цикл там можно только регистр регистр переслать. Полный клон 6502 - WDC 65C02 разогнали до 14МГц. STM8 довольно похож архитектурно на 6502. Интересный процессор, в СССР его тоже дернули, правда не сразу - у нас на нем были АГАТы и ПРАВЕЦ.

Изображение пользователя st.

Симпатичная штучка, умели же делать даже клоны. Видео по аналоговому выходу?

Изображение пользователя Vitasam.

Да, выглядит неплохо. Выход видео - аналоговый "тюльпан"

Изображение пользователя Vitasam.

Поизучав интернеты, пришел к выводу, что эта машинка была незаслуженно достаточно хорошо забыта - не нашлось ни текстовых ресурсов, ни программ/игр. Лишь пара записей на сайтах old-computer музеев, в которых copy/pasted текст из вышеупомянутой Википедии.

У меня есть 5 кассет. Если они окажутся читабильными, сильно плохо будет, с точки зрения копирайтов, выложить WAV файлы в Public Domain?

В большинства случаев это норм. Авторские права истекли, субъект их исчез или не возражает. Но больные на голову есть. Тривиальный пример — Тетрис, но даже их удовлетворяет, когда нарушающую их права игру просто удаляют из доступа по их запросу.

Изображение пользователя Vitasam.

Я тоже думаю, что, скорее всего, истекли. Но надо для начала проверить, читаются ли кассеты и есть ли на них что-либо. А то там может быть что-нибудь уровня программок для Радио86РК в журналах :)

Изображение пользователя Vitasam.

Набрел на такой сайт: Applesoft BASIC in Javascript.
Попробовал этот пример на Микропрофессоре:

0 REM Rod's Color Pattern
10  GR : ONERR GOTO 99
20  FOR W = 3 TO 50
30  FOR I = 1 TO 19
40  FOR J = 0 TO 19
50  K = I + J
60  COLOR= J * 3 / (I + 3) + I * W / 12
70  PLOT I,K: PLOT K,I: PLOT 40 - I,40 - K: PLOT 40 - K,40 - I
80  PLOT K,40 - I: PLOT 40 - I,K: PLOT I,40 - K: PLOT 40 - K,I
90  NEXT : NEXT : NEXT : GOTO 20
99  TEXT : HOME : END
Изображение пользователя Vitasam.

Перепробовал 4 музыкальных центра начала 2000х и старый, но дорогой плеер Sony Wilkman конца 90х. Ни один аппарат кассеты уже не умеет - резиновые детали (пассики и прижимные ролики) вышли из строя. В результате купил дешевый, но свежий китайский плеер, шумящий усилителем и помехами двигателя, зато умеющий кассеты воспроизводить:
Player

Изображение пользователя Vitasam.

За отчетный период удалось немножко проапгрейдить Микропрофессор для современной жизни:
1. Платка цифрового магнитофона заработала на запись и чтение, после доработки выхода MIC до "нормального" уровня сигнала (3D-корпус для магнитофона обещали напечатать):
ZX-Taper

2. Удалось оцифровать программы со всех 5 кассет - оказалось, что программы записаны на кассетах по 3 раза. После оцифровки всего в .WAV файлы (44.1 KHz, 32-bit float) получилось по 6 вариантов одной программы (2 стереоканала по 3 раза). Видимо, лента на последних вариантах была менее изношена, поэтому всё удалось перевести в 1-битный формат ZX-Магнитофона:

.wav (44.1 KHz, 32-bit float) -> .wav (44.1 KHz, 8-bit integer) -> .baw (1-bit).

Глядя на игры на этих кассетах, становится понятно, почему ZX Spectrum 48, появившийся в тот же год с Микропрофессором, завоевал рынок.

3. С целью эксперимента по загрузке бинарных данных в память MPF-II через штатный порт принтера (линии STROBE и BUSY) была сделана платка "сервера" на Ардуине:
Сервер

Сам эксперимент:

Программа "Hello World" на Асме 6502, использующая стандартную процедуру Монитора (FDEDh) для вывода символа на экран

Code:
      ;.org $400
      ldx #$00      ; index
loop: lda messg,x   ; get symbol
      cmp #$ff      ; it's END?
      bne here      ; No, continue
      rts           ; return
here:
      jsr $FDED     ; send byte
      inx           ; inc index
      jmp loop
messg:
      dcb $A2,$00,$BD,$11,$04,$C9,$FF
      ....
      dcb $CF,$D2,$CC,$C4,$8D,$FF`

Скомпилировано в бинарный вид:

0400: A2 00 BD 11 04 C9 FF D0
0408: 01 60 20 ED FD E8 4C 02
0410: 04 C8 C5 CC CC CF A0 D7
0418: CF D2 CC C4 8D FF FF 00

Программа на Бейсике, получающая биты из линии BUSY и загружающая байты в память:

15 TEXT : HOME : REM FILE "DLOA.."
25 PRINT "DATA LOADER, VER.1.7"
30 PRINT "START SERVER,PRESS ENTER"
35 GET A$
37 AC = 0 : REM POKE ADDRESS COUNTER
40 BX = 0 : REM BYTE FROM PORT
42 CN = 0 : REM BYTES COUNTER
50 REM === GET ADDRESS
52 GOSUB 605
53 AH = S
60 GOSUB 605
63 AD = AH * 256 + S
65 PRINT "TARGET ADDRESS:";AD
70 REM === GET DATA SIZE
72 GOSUB 605
74 DH = S
76 GOSUB 605
78 DS = DH * 256 + S
79 PRINT "DATA SIZE:";DS
80 REM === GET DATA BYTES
81 AC = AD : REM POKE ADDRESS
82 FOR N = 1 TO DS
84 GOSUB 605
86 PRINT S
87 POKE AC,S: AC = AC + 1
88 NEXT N
110 PRINT : PRINT "PRESS ENT TO RUN"
112 GET A$
114 CALL AD
480 END
500 REM === GET BUSY FLAG ===
505 BX = PEEK (49168)
508 T = BX - 128
510 IF T > 0 THEN GOTO 517
512 B6 = 0 : GOTO 520
517 B6 = 1
520 RETURN
600 REM === GET BYTE VALUE ===
605 P = 7: S = 0
607 PRINT "#";CN;": ";
610 FOR V = 1 TO 8
615 L = PEEK (49241)
620 FOR Z = 1 TO 20: NEXT Z
625 L = PEEK(49240)
627 FOR Z = 1 TO 10: NEXT Z
630 GOSUB 505
632 PRINT B6;" ";
635 IF B6 > 0 THEN S = S + 2 ^ P
640 P = P - 1
645 NEXT V
646 CN = CN + 1
647 PRINT
650 RETURN 

Протокол - подобие SPI-шины:
1. MPF-II выставляет СТРОБ в "1"
2. По переднему фронту строба "0"->"1" Ардуина выставляет в BUSY следующий бит.
3. MPF-II собирает всё в байты.

BASIC 1
BASIC 2
BASIC 3

Практической пользы от этого особой нет - скорость передачи данных мала ("протокол" использует достаточно большие задержки, чтобы наверняка попасть в биты и стробы), контроля и коррекции ошибок нет.

А после того, как на глаза попался этот проект на Гитхабе, вообще не осталось смысла городить "железное" решение. Оказалось, что Микропрофессор умеет записывать бинарные данные на кассету и читать оттуда в формате Apple-II. Тот же Hello World, загруженный "правильным" способом:

1. Бинарные файлы записаны в текстовый файл hellow.mon в таком формате:

0400: A2 00 BD 11 04 C9 FF D0
0408: 01 60 20 ED FD E8 4C 02
0410: 04 C8 C5 CC CC CF A0 D7
0418: CF D2 CC C4 8D FF FF 00

2. Утилита c2t конвертировала текстовый файл в звуковой файл формата Apple-II:

...\MPF-II\C2T\c2t-master\bin>c2t-96h.exe -2 hellow.mon,400 hello.wav

Reading hellow.mon, type monitor, segment 1, start: 0x0400, length: 32

Writing hello.wav as Apple II formatted wave.

To load up and run on your Apple II, type:

        CALL -151
        400.41FR
        400G

3. Утилита wav2baw конвертировала файл hello.wav в 1-битный файл hello.baw:

...\MPF-II\C2T\c2t-master\bin>wav2baw.exe hello.wav hello.baw
Sample rate: 11025
LEVEL: 0 0
pauseDuration = 99.954651
BLOCK-1 0       6700            4.288617

4. Полученный файл hello.baw скопирован на SD-карточку ZX-Магнитофона и загружен в память MPF-II, далее запуск командой Монитора:

 CALL -159
 400.41FRA
 400G

Monitor