Skip to content

Instantly share code, notes, and snippets.

@svofski
Last active August 24, 2021 15:41
Show Gist options
  • Save svofski/5903638d517e282d14bbf7290346b50c to your computer and use it in GitHub Desktop.
Save svofski/5903638d517e282d14bbf7290346b50c to your computer and use it in GitHub Desktop.
joyсtest 07/0e/0f/27/2e/2f
; Тест 🕹️ для Вектора-06ц
; проверяет джойстик "С" на портах 0e/0f и УСПИД на порту 07
; то же на портах 2e/2f и 27 для платы ЛЕШАДОК ПОМПЕ
.project joyctest.rom
.tape v06c-rom
rastint equ 38h ; прервывание обратного хода луча
.org 100h
; стандартная точка входа .rom файла
di ; запретить прерывания
xra a
out 10h ; выключить квазидиск
lxi sp, $100 ; инициализировать указатель стека
mvi a, 0c9h ; код инструкции RET
sta rastint ; инициализировать обработчик RST7
call clrscr ; очистить экран
call set_palette; установить палитру
toujours:
; задать позицию вывода текста
; столбец 0, строка $f8 (верх экрана)
lxi h, $00f8
call gotoxy
; собрать строку из битов
lxi h, msg
call puts
; напечатать биты джойстика 1
lxi h, $00e8
call gotoxy
lxi h, joe
call puts
in $0e
call bit2str
call puts
lxi h,j2e
call puts
in $2e
call bit2str
call puts
; напечатать биты джойстика 2
lxi h, $00d8
call gotoxy
lxi h, jof
call puts
in $0f
call bit2str
call puts
lxi h, j2f
call puts
in $2f
call bit2str
call puts
; напечатать биты джойстика "7"
lxi h, $00c8
call gotoxy
lxi h, jo7
call puts
in $07
call bit2str
call puts
lxi h, j27
call puts
in $27
call bit2str
call puts
ei
hlt
jmp toujours
bl: lxi h, space
call puts
msg:
db 'JOY "C" 0E/0F/2E/2F USPID 07/27',0
joe: db '$0E ',0
jof: db '$0F ',0
jo7: db '$07 ',0
j2e: db '$2E ',0
j2f: db '$2F ',0
j27: db '$27 ',0
space: db ' ',0
bitpad:
db 'xxxxxxxx ', 0 ; also a trailing blank
; преобразовать число в A в строку бит в bitpad,
; вернуть указатель на строку в HL
bit2str:
mov b, a
mvi c, 8
lxi hl, bitpad
b2s_next:
mov a, b
rlc
mov b, a
mvi a, '0'
jnc $+4
inr a
mov m, a
inx h
dcr c
jnz b2s_next
lxi h, bitpad
ret
;
; Микро-библиотека для Вектора-06ц
;
; Область временного хранения SP
__savedsp dw 0
; Очистка всей экранной области
clrscr
di
lxi h,0
dad sp
shld __savedsp
lxi sp, 0
lxi b, 0
lxi d, $1000
_clrscr_1:
push b
push b
push b
push b
dcx d
mov a, d
ora e
jnz _clrscr_1
lhld __savedsp
sphl
ret
; Программирование палитры
set_palette
ei
hlt
mvi a, 88h ; настроить ППИ
out 0
mvi a, 255 ; сбросить прокрутку
out 03
mvi c, $f ; программирование палитры
mvi b, $00
_set_palette_1:
mov a,c
out 2
mov a, b
out $c
out $c
out $c
out $c
cma
mov b, a
dcr c
jp _set_palette_1
ret
; установить позицию для вывода следующего символа
; H = столбец, L = строка ($F8 = верхняя)
gotoxy
shld _puts_de
ret
; Вывести 0-терминированую строку в HL на экран
puts
shld _puts_sptr
_puts_1:
call _putchar
jnz _puts_1
ret
_puts_sptr:dw 0
_puts_de: dw 0
; Нарисовать один символ
_putchar:
lhld _puts_sptr
mov a, m
ora a
rz
mov c, a
inx h
shld _puts_sptr
xchg
lhld _puts_de
inr h
shld _puts_de
xchg
lxi h,0
dad sp
shld __savedsp
; Найти адрес спрайта символа
; bc = (c-32)*8
mov a,c
sui 32
mov c, a
rlc
rlc
rlc
ani 7
mov b,a
mov a,c
rlc
rlc
rlc
ani $f8
mov c,a
lxi h, _font_table
dad b
sphl ; sp -> char
lxi h, $e000
dad d ; hl -> destination
; Выдавить биты на экран
pop b
mov m, c
dcr l
mov m, b
dcr l
pop b
mov m, c
dcr l
mov m, b
dcr l
pop b
mov m, c
dcr l
mov m, b
dcr l
pop b
mov m, c
dcr l
mov m, b
dcr l
lhld __savedsp
sphl
mvi a, 1
ret
_font_table:
; Font: 8X8!FONT.pf
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
db 0x30, 0x78, 0x78, 0x30, 0x30, 0x00, 0x30, 0x00
db 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00
db 0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00
db 0x30, 0x7C, 0xC0, 0x78, 0x0C, 0xF8, 0x30, 0x00
db 0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00
db 0x38, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0x76, 0x00
db 0x60, 0x60, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00
db 0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00
db 0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00
db 0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00
db 0x00, 0x30, 0x30, 0xFC, 0x30, 0x30, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x60
db 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00
db 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00
db 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00
db 0x7C, 0xC6, 0xCE, 0xDE, 0xF6, 0xE6, 0x7C, 0x00
db 0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00
db 0x78, 0xCC, 0x0C, 0x38, 0x60, 0xC0, 0xFC, 0x00
db 0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00
db 0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x0C, 0x00
db 0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00
db 0x38, 0x60, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00
db 0xFC, 0x0C, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00
db 0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00
db 0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0x18, 0x70, 0x00
db 0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x00
db 0x00, 0x30, 0x30, 0x00, 0x00, 0x30, 0x30, 0x60
db 0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00
db 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 0x00, 0x00
db 0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60, 0x00
db 0x78, 0xCC, 0x0C, 0x18, 0x30, 0x00, 0x30, 0x00
db 0x7C, 0xC6, 0xDE, 0xDE, 0xDE, 0xC0, 0x78, 0x00
db 0x18, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x00
db 0x7C, 0x66, 0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00
db 0x3C, 0x66, 0xC0, 0xC0, 0xC0, 0x66, 0x3C, 0x00
db 0x78, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0x78, 0x00
db 0x7E, 0x60, 0x60, 0x78, 0x60, 0x60, 0x7E, 0x00
db 0x7E, 0x60, 0x60, 0x78, 0x60, 0x60, 0x60, 0x00
db 0x3C, 0x66, 0xC0, 0xC0, 0xCE, 0x66, 0x3E, 0x00
db 0x66, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66, 0x00
db 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00
db 0x06, 0x06, 0x06, 0x06, 0x66, 0x66, 0x3C, 0x00
db 0x66, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0x66, 0x00
db 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x7E, 0x00
db 0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00
db 0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00
db 0x3C, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x00
db 0x7C, 0x66, 0x66, 0x7C, 0x60, 0x60, 0x60, 0x00
db 0x3C, 0x66, 0x66, 0x66, 0x6E, 0x3C, 0x0E, 0x00
db 0x7C, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0x66, 0x00
db 0x3C, 0x66, 0x70, 0x38, 0x0E, 0x66, 0x3C, 0x00
db 0x7E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x00
db 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x3E, 0x00
db 0x66, 0x66, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x00
db 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0xEE, 0xC6, 0x00
db 0x66, 0x66, 0x3C, 0x18, 0x3C, 0x66, 0x66, 0x00
db 0x66, 0x66, 0x66, 0x3C, 0x18, 0x18, 0x18, 0x00
db 0xFE, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xFE, 0x00
db 0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00
db 0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, 0x00
db 0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00
db 0x07, 0x0E, 0x39, 0x63, 0x83, 0x31, 0x1C, 0x07
db 0xC0, 0xE0, 0x38, 0x8C, 0x82, 0x18, 0x70, 0xC0
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment