Munching squares on TX-0

 

Про этот компьютер я встретил упоминание в книге Стивена Леви "Хакеры - герои компьютерной революции" и вот решил посмотреть, что он из себя представляет.

Эмулятор на JS существует давно, он представляет из себя смесь инглиша с японским.Есть несколько программ, которые можно запустить и посмотреть на работу. Взял отладчик огнелиса и выгрузил память программы, чтобы посмотреть на код. Познакомиться с опкодами можно тут.

И тут google подложил свинью ссылку на эмулятор MAME 0.236, в котором упоминается эмуляция компьютера. Стал искать версию, везде попалась x64, так называемая win32  эта свалка мусора без программ. Нашел MAME 0.253b и стал играть с ней. Запустид эмулятор: mame tx0_8kw -debug. Чтение хэшей подсказало, что нужен файл bin_munchingSquares.bin, но где его взять? поиски merged ROMs ничего не дали, но все же файл нашелся . Отдельный квест для MAME - запустить программу.- mame tx0_8kw munching -debug. После чехарды с файлами обнаружилось, что эмулятор успокоился, когда файл расположен в roms\tx0_ptp\munching\bin_munchingSquares.bin

Дальше - тупик, я так и не нашел, как загрузить .rim-подобный файлик, отладчик виснет на выборах пункта меню Media.

Остался simh, как я ни пытался, но так и не смог скомпилировать эмуляторы. Вспомнил про архив, который валялся в папке PDP-1 и нашел файлик TX-0.exe. Сегодня с утра нашел другую свалку.

Создал файл simh.ini

; TX-0 Loader Routine, pp20 of TX0_funcDescr.pdf
set dpy enable
att petr bin_munchingSquares.bin
boot petr

и запустил программу, введя в консоли g 20. Появился экран с диагональной линией. Облом-с.
Посмотрел на программу, введя e -m 2-60
TX-0 simulator V4.0-0 Current        git commit id: 0912a927                    
HALT instruction, PC: 017777 (trx 00000 (Transfer Indexed))                     
sim> e -m 20-60                                                                 
20:     opr cll (Clear left half of AC to zero)                                 
21:     add 00052 (Add)                                                         
22:     trn 00042 (Transfer Negative)                                           
23:     opr alr (Place accumulator contents in live register)                   
24:     opr cyl (Cycle AC left one place)                                       
25:     opr cyl (Cycle AC left one place)                                       
26:     opr cyl (Cycle AC left one place)                                       
27:     opr cyl (Cycle AC left one place)                                       
30:     opr cyl (Cycle AC left one place)                                       
31:     opr cyl (Cycle AC left one place)                                       
32:     opr cyl (Cycle AC left one place)                                       
33:     opr cyl (Cycle AC left one place)                                       
34:     opr cyl (Cycle AC left one place)                                       
35:     opr orl (Logical or of AC and LR is placed in LR)                       
36:     lda 00051 (Load AC)                                                     
37:     opr --- (CLR+PAD+LMB)                                                   
40:     opr dis (Display point on CRT corresponding to contents of AC)          
41:     tra 00020 (Transfer)                                                    
42:     opr cll (Clear left half of AC to zero)                                 
43:     opr alr (Place accumulator contents in live register)                   
44:     opr tac (Contents of test accumulator are placed in AC)                 
45:     add 00051 (Add)                                                         
46:     sto 00051 (Store AC)                                                    
47:     opr lac (Place LR in AC)                                                
50:     tra 00024 (Transfer)                                                    
51:     sto 00000 (Store AC)                                                    
52:                                                                             
53:     sto 00000 (Store AC)                                                    
54:     sto 00000 (Store AC)                                                    
55:     sto 00000 (Store AC)                                                    
56:     sto 00000 (Store AC)                                                    
57:     sto 00000 (Store AC)                                                    
60:     sto 00000 (Store AC)  

Мало понятно, что это такое. Вспомнил другую версию на PDP-1, в которой картинка менялась в зависимости от статуса слова, который устанавливался тумблерами. Начал нажимать клавиши, и картинка ожила. По ощущениям "Сначала не понял, а потом кааак понял":

Хорошо бы написать свою программу, но кодировать 18-битные опкоды выше моих сил, да и кросс-ассемблер не нашелся
В заключение оставлю ссылку с файлами и несколько фоток.




Дополнение. Первый блин - комом


Комментарии