Ну и поскольку ошибки и невооруженным глазом видны были, я решил проверить это поделие
каким-либо не самым сложным тестом для оригинального
6502 CPU.
Если начать искать, то только вот здесь:
http://www.6502.org/tools/emu/ тестов предлагают
довольно много...
Весь вопрос упирался в то, что у меня нет подобающих компиляторов, да и средство вывода не
поддерживается никакими стандартными программными ресурсами.
То есть, как выводить сообщения об ошибках - меня просто в ступпор вводило.
Но, повезло - нашел я неплохой тест, как мне кажется,
TTL6502TST.rar , который ни в каких
средствах вывода не нуждается!
Выбрал я его, потому как в пакете был асм-исходник, бинарник, и даже HEX-файл, ну и запихал
я его в исследуемый объект весьма своеобразно: скомпилировав в нем
HEX-dump, сформированный
через
Win-HEX:
Code: Select all
; TTL6502.TEST
*= $0600
jmp START
*= $e000
START:
DCB $EA,$4C,$EC,$FF,$EA,$38,$B0,$FE,$EA,$4C,$6E,$F5,$EA,$18,$A9,$00
DCB $60,$EA,$A9,$01,$85,$03,$A2,$FF,$9A,$A9,$FF,$48,$28,$90,$FE,$D0
DCB $FE,$50,$FE,$10,$FE,$30,$03,$4C,$27,$E0,$F0,$03,$4C,$2C,$E0,$70
DCB $03,$4C,$31,$E0,$B0,$03,$4C,$36,$E0,$A9,$02,$85,$03,$A9,$00,$48
...
DCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
DCB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$4C,$12,$E0,$EA
DCB $38,$B0,$FE,$EA,$EA,$A9,$FF,$48,$28,$40,$F4,$FF,$00,$E0,$F4,$FF
Заодно и поинтересовался на
http://forum.6502.org/ - как они это делают, оказалось, что так же,
только, похоже, что скриптом через регулярные выражения они делают
HEX-dump...
Ну а теперь - самое интересное, как же работает тест, который ничего не выводит - оказалось,
что очень логично!
После исполнения каждого примера он либо движется к следующему тесту, либо зависает в
бесконечном цикле по условию с флагом.
Примерно так:
Code: Select all
$00EB19 ; SEC ; $30 - $50 = $20, returns C = 0, returns V = 0
$00EB19 ; LDA #$30
$00EB19 ; SBC #$50
$00EB19 A9 74 lda #$74
$00EB1B 85 03 sta Test
$00EB1D A9 50 lda #$50
$00EB1F 85 10 sta TmpZP0
$00EB21 8D 00 10 sta TmpAB0
$00EB24 38 sec
$00EB25 A9 30 lda #$30
$00EB27 E9 50 sbc #$50
$00EB29 L271
$00EB29 B0 FE bcs L271 ; error, ->
$00EB2B L272
$00EB2B 70 FE bvs L272 ; error, ->
$00EB2D L273
$00EB2D F0 FE beq L273 ; error, ->
$00EB2F L274
$00EB2F 10 FE bpl L274 ; error, ->
$00EB31 C9 E0 cmp #$E0
$00EB33 L275
$00EB33 D0 FE bne L275 ; error, ->
То есть, если это происходит под отладчиком, то видно, что перестал меняться адрес.
По листингу - смотришь, на каком тесте зависли, и что не так.
А на реальной железке - тоже следует индицировать адрес хотя бы светодиодами,
и по адресу - искать ошибку по листингу.
Я раньше с тестами ЦПУ в принципе не сталкивался, поэтому пришлось почитать исходник...
Ну оооочень логично строится тест! Почему он мне так и понравился...
И, кстати,
Easy 6502 этот тест четко проходит. А моё поделие
6502 assembler - ... теперь
уже тоже проходит!
