



Moderator: Lavr
Code: Select all
;=======================================================================
include "8080.inc"
include "win2koi7.inc"
include "bv.inc"
;-----------------------------------------------------------------------
macro rom_call _proc {
local .next
lxi sp,.next - 2
jmp _proc
dw .next
.next:
}
macro test_head _line,_number {
mvi e,_line
mvi d,scr_left
lxi b,_test
rom_call str_out
mvi a,_number
rom_call char_out
inr d
}
;=======================================================================
rom_base equ 0C000h
scr_left equ 92h
;=======================================================================
org rom_base
;-----------------------------------------------------------------------
jmp @F
@@:
mvi a,82h
sta 0FF03h
rom_call cls
mvi e,5
mvi d,scr_left
lxi b,_ver
rom_call str_out
;-----------------------------------------------------------------------
; проверка возможности записи и чтения из видео памяти
;-----------------------------------------------------------------------
test_head 20,"1"
lda 0A000h
mov c,a
cma
sta 0A000h
lda 0A000h
cma
cmp c
lxi b,_ok
jz @F
lxi b,_err
@@:
rom_call str_out
;-----------------------------------------------------------------------
; проверка пересечения областей памяти
;-----------------------------------------------------------------------
; 2 - A14
; 3 - A15
;-----------------------------------------------------------------------
test2_3:
test_head 30,"2"
xra a
sta 0
sta 4000h
sta 8000h
dcr a
sta 0
lda 4000h
ora a
jnz .err
lxi b,_ok
rom_call str_out
;-----------------------------------------------------------------------
test_head 40,"3"
lda 8000h
ora a
lxi b,_ok
jz @F
.err:
lxi b,_err
@@:
rom_call str_out
;-----------------------------------------------------------------------
@@:
jmp @B
;=======================================================================
;
;=======================================================================
cls:
lxi h, 9000h
lxi b,0C000h
mvi e,0
@@:
mov m,e
inx h
mov a,h
cmp b
jnz @B
mov a,l
cmp c
jnz @B
ret
;-----------------------------------------------------------------------
; a - символ
; de - позиция на экране (абсолютный адрес)
; hl - используется
;-----------------------------------------------------------------------
char_out:
lxi h,(font shr 3) - 32
add l
mov l,a
jnc @F
inr h
@@:
dad h
dad h
dad h
repeat 8
mov a,m
stax d
inr l
inr e
end repeat
mov a,e
sui 8
mov e,a
ret
;-----------------------------------------------------------------------
; bc - указатель на строку. используется всё.
; de - позиция на экране (абсолютный адрес)
;-----------------------------------------------------------------------
str_out:
ldax b
ora a
rz
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
lxi h,(font shr 3) - 32
add l
mov l,a
jnc @F
inr h
@@:
dad h
dad h
dad h
repeat 8
mov a,m
stax d
inr l
inr e
end repeat
mov a,e
sui 8
mov e,a
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
inx b
inr d
jmp str_out
;=======================================================================
_test: dr "ТЕСТ ",0
_ok: dr " - OK",0
_err: dr " - ОШИБКА!",0
_ver: dr "ВЕРСИЯ ",MAIN_VERSION,".",SUB_VERSION,".",BUILD_VERSION,0
times ((256 - ($ and 255)) and 255) db 0FFh
font: file "font.bin"
;=======================================================================
times (rom_base + 2048 - $) db 0FFh
;=======================================================================