391
18.02.2023, 16:00 Uhr
MarioG77
|
Moin,
vermutlich hat hier wer (mehr als ich) Erfahrung mit 8086 Assembler...
Mein Testprogramm funktioniert (theoretisch) in der DOS-Box. Praktisch nicht auf dem EC1834.
Beim Test wird der Code einfach nicht ausgeführt.
Die Prozedur wird aufgerufen, der erste Text wird ausgegeben und dann springt die Routine zurück in das Hauptprogramm.
Der vollständige Code ist hier zu sehen: https://github.com/mgoegel/ec1834_ramtest
Mein Code zeigt noch den Text "msg_test1_1" an. Die Zeile
Quellcode: | call OUTPUT_HEX_DIGIT4 ; <--------- WIRD NIE ERREICHT
|
wird nicht aufgerufen.
Quellcode: | ; TEST SEGMENT 4xxxx with even numbers ; set di to start offset TEST1: mov si, msg_test1_1 call OUTPUT_TEXT mov BYTE [cnt_error], 0 mov BYTE [sig_abort], 0 mov BYTE [tst_byte], 0
push bx push es push di cld
; init offset/data ; sub di,di sub ax,ax mov cx,LOOPSIZE mov dl,8 ; init start segment mov bx,RAMEXT_START mov es,bx mov ah,BYTE [tst_byte] ; init compare value for test mov al,BYTE [tst_byte] ; init value for test call OUTPUT_HEX_DIGIT4 ; <--------- WIRD NIE ERREICHT call OUTPUT_CR .loop_test1: mov al,BYTE [tst_byte] ; init value for test mov es:[di],al mov al,es:[di] push ax xor al,ah ; Zero flag set, when equal pop ax jz .OK1 ; zero, so value is equal ; ERROR CONDITION HERE call PRINT_ERRADDR call ERRORCNT_WAIT ; press "q" for abort cmp BYTE [sig_abort], 1 jz .loop0_end ; abort requested .OK1: inc di inc di ; inc by 2 mov ax, 0 loop .loop_test1 ; print current test offset sub di,2 call OUTPUT_HEX_DIGIT4 call OUTPUT_CR add di,2
; decrease outer loop counter dec dl jz .loop0_end ; exit when done mov cx, LOOPSIZE jmp .loop_test1 ; another round .loop0_end: pop di pop es pop bx call OUTPUT_CRLF call OUTPUT_CRLF ret
|
Ich weiß, der Code ist alles andere als schön. Verbesserungen nehme ich gerne an... ![](templates/default/images/icon/smile_new.png)
Ursprung ist die Testroutine vom BIOS. Die arbeitet mit dem DS Register, da ich das aber öfter zur Ausgabe benötige, habe ich das ES Register genommen.
Wie gesagt - in der DOS Box funktioniert der Code so. -- Gruss Mario
Betriebsbereit: KC85/3, 2x [KC85/4, D004+Floppy], PPC512, PC1512, 2xEC1834, Soemtron 286, 3x PC1715, picoAC1 Zu restaurieren: 1x D004 |