эмуляция ЮТ-88

 


Добрался до компьютера свое мечты - ЮТ-88. Увы, в старое время он так и был недоступен.

Эмуляторы нашлись - 1,2,3. Остался ассемблер и часть информации. Внутри компьютера находится процессор КР580ВМ80, совместимый с Intel8080. Пригодится Tasm 3.1(не Borland, а Telemark), и моя давно написанная утилитка z80<>8080. Пошел дальше, наткнулся на непонятную информацию - непонятно, как подготовить файл .rku, потому что контрольная сумма блока считается не пойми как. Скомпилировал тсходник первой программы

tasm -85 -b -q src.asm src.bin

Исходник src.asm

.ORG 3000h
START:
 lxi h,0E800h
m1  mov m,l
 inr l
 jnz m1
 ret
.END
Да, с адресом видеопамяти я так и не врубился, указал 0E000h. в эмуляторе Башкирия2м открываю отладчик, жму Ctrl+L, указываю загруженный адрес 3000. Возвращаюсь к эмулятору, набираю команду G3000 - ничего нет. В отладчике меняю адрес на правильный
ура! заработало! Остался неведомый формат rku. Вычитал, как сохранять файл:
Сохранил программу и сравнил бинарь с .rku:

Сразу понятно, как посчитать эту контрольную сумму. Для удобства написал программу bin2rku, на трех эмуляторах программа загрузилась.

Посмотрел опубликованные программы, ничего интересного. Заодно выяснилось, что эмуляции звука в Башкирии2м нет(программа gamma). Ладно, Вернемся к опросу клавиатуры. В документации указано, что порт A0 - это данные клавиатуры. Но из порта ничего не читалось, чтение доков и копание в отладчиков подсказало другой способ:


.ORG 3000h

START:
kl  ;in 0A0h
 call 0fdaeh ;
 cpi 0FFh
 jz kl
 sta 0E803h
 push psw
 ani 0f0h
 rar
 rar
 rar
 rar
 call hnum
 sta 0E800h
 pop psw
 ani 0fh
 call hnum
 sta 0E801h
 mvi a,58
 sta 0E802h
 jmp kl
hnum
 mov l,a
 mvi h,0
 lxi d,hx
 dad d
 mov a,m
 ret

hx
 .byte "0123456789ABCDEF"
.END

при нажатии клавиш в верхнем левом углу отображается код(255 если не нажато). Захотелось порисовать немножко, используя набор символов:

.ORG 3000h

START:
;zero memory
 lxi h,0E800h
zm    mvi m,0
 inx h
 mov a,h
 cpi 0F0h
   jnz   zm
; draw line
 lxi d,0 ; D.E=y.x
ll    call plot
 inr e
 call plot
 inr e
 inr d
 mov a,d
 cpi 64
   jnz  ll
g    jmp g

plot
;get bit value
 mov a,d
 ani 1
 add  a
 xra e
 ani 0FEh
 xra e
 mov c,a
 mvi b,0
 lxi h,bw
 dad b
 mov a,m
 push psw
;y*64
; mov l,d
  mov a,d
 ora a
 rar
 mov l,a
 mvi h,0
 dad h
 dad h
 dad h
 dad h
 dad h
 dad h
 mov a,e
 mvi b,0E8h
 ora a
 rar
 mov c,a
 dad b
 pop psw
 ora m
 mov m,a
 ret
bw .byte 1,2,4,16
;01|02 (y&1)*2+(x&1)
;--+--
;04|16

.END

;up 19
;down 1A
;left 08
;right 18

К коду я еще вернусь, а пока файлы тут.


Комментарии