6502, 12 bayt (Apple II ise 13 bayt)
6502
Makine kodu, bir çift sıfır sayfa konumunun karakter girişi ($ FE) ve çıkış (FF) donanımına bağlı olduğunu varsayar. 6502 tabanlı sistemlerin çoğu, G / Ç adresleri genellikle sıfır sayfada olmamakla birlikte, bu şekilde G / Ç'yi kolaylaştırmaktadır.
Basit olması için Python ile yazılmış 6502 mikrobilgisayar sistemi simülatörü Py65 kullandım .
İşte Py65'ten bir bellek dökümü. Aşağıdaki kodu $ FE ve $ FF ile çakışmayacak şekilde sıfır sayfada herhangi bir yere yükleyebilirsiniz.
PC AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.mem 0:b
0000: a9 21 85 ff a5 fe f0 fc 85 ff d0 f4
Bir Windows komut penceresinde çalıştırırken, istediğiniz bir metni (Ctrl + V) yapıştırabilir veya yazabilirsiniz. Yazıyorsanız, yeni bir satır için Ctrl + J tuşlarına basın (aynı ASCII karakter). İşlemciyi kesmek ve Py65 komut istemine geri dönmek için Ctrl + C tuşlarına basın.
Doğal olarak, montaj kodunu okumak daha kolaydır.
PC AC XR YR SP NV-BDIZC
6502: 0000 00 00 00 ff 00110010
.d 00:0b
$0000 a9 21 LDA #$21
$0002 85 ff STA $ff
$0004 a5 fe LDA $fe
$0006 f0 fc BEQ $0004
$0008 85 ff STA $ff
$000a d0 f4 BNE $0000
Netlik sağlamak için, işte CBA65 formatında montaj kodu .
; ASSEMBLE:
; cba65 bangit
;
; LOAD/RUN
; python3 py65/monitor.py -i 00fe -o 00ff -l bangit.bin
; goto 0000
.FILES BIN=256
; I/O LOCATIONS
GETC .EQU $FE ; (1) MOVING PY65'S GETC TO ZP SHAVES 1 BYTE
PUTC .EQU $FF ; (1) MOVING PY65'S PUTC TO ZP SHAVES 2 BYTES
.ORG $0000
VROOM LDA #'!'
STA PUTC
VROOM2 LDA GETC
BEQ VROOM2
STA PUTC
BNE VROOM
.END
Elma II
Yukarıdaki kod boş bir değer olmadığını belirtir, bu nedenle boş olmayan bir değer döndürülene kadar yoklama devam eder.
Karşılaştırma için, Apple I ve Apple II, klavye G / Ç adresinin bit 7'sini ayarlayarak yeni bir karakterin kullanılabilirliğini gösterir; bu, karakterin alınmasından sonra silinmesi gerekir. Bu sistemlerde, karakteristik G / Ç genellikle donanıma doğrudan erişmek yerine sistem monitörü yordamları çağırılarak gerçekleştirilir.
RDKEY ($ FD0C) ve COUT'u ($ FDED) çağırarak, yukarıdakilerin Apple II eşdeğeri 13 baytta kodlanabilir ve RAM'de herhangi bir yerde çalıştırılabilir. İşte bir Android // e emülatöründe çalıştırdığım kod , Android 9'daki a2ix .
Return tuşuna basmak yeni satırla aynı etkiye sahiptir.
*300L
0300- A9 A1 LDA #$A1
0302- 20 ED FD JSR $FDED
0305- 20 0C FD JSR $FD0C
0308- 20 ED FD JSR $FDED
030B- F0 F3 BEQ $0300
Ünlem işareti için normal $ # 21 yerine ASCII değeri yerine, bunun yerine # $ A1 kullanıldığını fark ettiniz mi? Bunun nedeni, standart ASCII değerlerinin COUT'a gönderilmesinin, bunların "ters modda", beyaz üzerine siyah görünmelerine neden olmasıdır. ASCII'nin siyah beyaz normal beyaz olarak gösterilmesi, COUT çağrılmadan önce akümülatördeki karakter değerine # $ 80 eklenmesini gerektirir. RDKEY, hi-bit setli karakterleri döndürdüğü için, montaj programları genellikle ASCII değerini kullanmadan önce almak için karakterin bitini siler.