Apa yang dapat dilakukan dengan
komputer pada relay elektromagnetik yang tidak memiliki perangkat input, dan dari perangkat output - hanya tumpukan delapan register?
Mainkan game tentu saja!
Orang kuno bermain di kalkulator MK-61/52, yang hanya sedikit lebih jelas.

Tebak nomornya
Saya mulai dengan permainan, di mana komputer menggunakan setengah divisi harus menemukan integer yang disembunyikan oleh pemain dari 0 hingga 100.
Komputer menulis firasatnya untuk mendaftar A, dan kemudian berhenti.
Nilai semua register dapat dilihat berkat LED yang ada di relai:

Sekarang pemain harus mengubah kode program dalam ROM, menggantikan konstanta yang dimuat ke register D. Jika tidak ada 0, ini berarti asumsi lebih besar dari angka yang Anda minta. Kalau tidak, kurang. Setelah itu, Anda perlu mengklik tombol "lanjutkan kerja". Setelah memeriksa kasus D, komputer menggunakan asumsi sebelumnya sebagai batas atas atau bawah dalam upaya berikutnya.
Versi pertama dari program iniMOVI B, 1 ; 00: 10000001 00000001 MOVI C, 101 ; 01: 10000010 01100101 Loop: ADD A, B, C ; 02: 01001000 00011010 SHR A, A ; 03: 01111000 00001100 HALT ; 04: 00010000 00000000 MOVI D, guess ; 05: 10000011 iiiiiiii OR F, D, D ; 06: 01101000 00110011 JMP NZ, Greater ; 07: 11100111 00001010 MOV B, A ; 08: 00011001 00000000 JMP Loop ; 09: 10000111 00000010 Greater: MOV C, A ; 0a: 00011010 00000000 JMP Loop ; 0b: 10000111 00000010

Kerugian dari program pertama adalah tidak nyaman untuk digunakan. Ini dapat dipahami dengan melihat foto ROM - tidak mudah untuk mengganti sakelar toggle sekecil itu saat bermain gim (tetapi Anda juga perlu memastikan bahwa program tidak merusaknya secara tidak sengaja).
Jadi saya datang dengan opsi input yang berbeda. Untuk debugging
, sakelar sakelar disediakan di sebelah setiap register untuk mengatur ulang nilainya. Mengalihkannya jauh lebih nyaman daripada mengganti ROM.
Sekarang komputer memasuki unit dalam register D terlebih dahulu, dan pemain membuangnya (jika tebakannya kurang dari angka yang diinginkan), atau membiarkannya apa adanya (jika tebakannya lebih).
Versi terakhir dari program MOVI B, 1 ; 00: 10000001 00000001 MOVI C, 101 ; 01: 10000010 01100101 Loop: ADD A, B, C ; 02: 01001000 00011010 SHR A, A ; 03: 01111000 00001100 MOVI D, 1 ; 04: 10000011 00000001 HALT ; 05: 00010000 00000000 OR F, D, D ; 06: 01101000 00110011 JMP NZ, Greater ; 07: 11100111 00001010 MOV B, A ; 08: 00011001 00000000 JMP Loop ; 09: 10000111 00000010 Greater: MOV C, A ; 0a: 00011010 00000000 JMP Loop ; 0b: 10000111 00000010
Subtraction game (bashe game)
Game klasik lain yang sering diimplementasikan oleh programmer pemula adalah game Bachet.
Di dalamnya, dua pemain dari tumpukan yang awalnya berisi item N bergantian mengambil setidaknya satu dan tidak lebih dari item M. Yang kalah adalah orang yang tidak punya apa-apa untuk diambil.

Dalam versi saya, gim ini dilengkapi dengan komputer. Awalnya, sekelompok 21 item (misalnya, 21 pertandingan). Pemain mengambil 1 hingga 3 pertandingan secara bergantian, dan orang yang mengambil pertandingan terakhir menang.
Gim ini memiliki strategi kemenangan untuk pemain pertama - selalu meninggalkan jumlah pertandingan, yang merupakan kelipatan empat. Karena 0 juga merupakan kelipatan dari empat, pemain kedua tidak akan dapat membawa permainan ke posisi ini, yang berarti ia akan kalah.
Komputer menempati posisi kedua, memberikan kesempatan kepada orang-orang, tetapi tidak membuat kesalahan. Dan jika pemain tidak mengikuti strategi kemenangan, maka komputer akan melakukannya.
Versi pertama dari program ini MOVI A, 21 ; 00: 10000000 00001101 Loop: HALT ; 01: 00010000 00000000 MOVI B, move ; 02: 10000001 000000mm SUB A, A, B ; 03: 01011000 00001001 AND C, A, 3 ; 04: 01100010 10001011 MOVI Z, C, 1 ; 05: 10010010 00000001 SUB A, A, C ; 06: 01011000 00001010 JMP Loop ; 07: 10000111 00000001
Pada versi pertama, pendekatan yang sama digunakan untuk "tebak nomor" - pada gilirannya Anda harus menyandikan jumlah kecocokan di dalam salah satu instruksi. Anda bahkan bisa menghitung dan mengambil semua pertandingan sekaligus, dan komputer tidak akan melihat apa pun.
Tapi kemudian saya menulis ulang program ini juga. Sekarang dalam tiga register (B, C, D) komputer masuk masing-masing 1, dan pemain harus mengatur ulang 0, 1 atau 2 dari mereka. Unit yang tersisa adalah pertandingan yang dia lakukan. Kecurangan juga dimungkinkan jika Anda mengatur ulang ketiga register (seolah-olah Anda tidak mengambil apa-apa).
Versi terakhir dari program MOVI A, 21 ; 00: 10000000 00010101 Loop: MOVI B, 1 ; 01: 10000001 00000001 MOVI C, 1 ; 02: 10000010 00000001 MOVI D, 1 ; 03: 10000011 00000001 HALT ; 04: 00010000 00000000 SUB A, A, B ; 05: 01011000 00001001 SUB A, A, C ; 06: 01011000 00001010 SUB A, A, D ; 07: 01011000 00001011 AND C, A, 3 ; 08: 01100010 10001011 MOVI Z, C, 1 ; 09: 10010010 00000001 SUB A, A, C ; 0a: 01011000 00001010 JC Exit ; 0b: 10110111 00001101 JNZ Loop ; 0c: 11100111 00000001 Exit: HALT ; 0d: 00010000 00000000
Tentu saja, programnya ternyata agak lebih lama, tetapi menggunakannya jauh lebih nyaman.
Selanjutnya, saya berencana untuk menyelesaikan ROM (sekarang hanya ada 32 kata dari kemungkinan 64), dan juga menambahkan perangkat input dalam bentuk matriks toggle switches. Mungkin Anda bisa membuat setidaknya tic-tac-toe.