Skip to content

Instantly share code, notes, and snippets.

@svofski
Created June 1, 2020 20:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save svofski/da44380b6475bc8a69690d6463044820 to your computer and use it in GitHub Desktop.
Save svofski/da44380b6475bc8a69690d6463044820 to your computer and use it in GitHub Desktop.
vector06c with b2m serial over tcp
; 🐟 для Вектора-06ц
.project comtest.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; установить палитру
; задать позицию вывода текста
; столбец 0, строка $f8 (верх экрана)
lxi h, $00f8
call gotoxy
; вывести строку
lxi h, msg
call puts
mvi a, $30
sta serputsel+1
lxi h, msg1
call serputs
mvi a, $32
sta serputsel+1
lxi h, msg2
call serputs
di
hlt
; вывести текст в компот
serputs:
mov a, m
ora a
rz
serputsel:
out $30
inx h
jmp serputs
msg:
db 'HELLO, WORLD!',0
msg1:
db 'HELLO, PORT $30 TO TCP 15015',0
msg2:
db 'HELLO, PORT $32 TO TCP 15016',0
;
; Микро-библиотека для Вектора-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
main.CPUClock=3MHz
main.Caption="Vector-06c"
main.ff.speed=10
main.ff.keymask[8]=20
main.scale.x=100%
main.scale.y=150%
main.globalsound=1
main.fullscreen=1280x1024x16
main.fullscreen.scale.x=2
main.fullscreen.scale.y=3
CPU : K580wm80a {
debug=cas
debug=gate
mem=ramdisk
port~[00-03]=sys.data
port~[04-07]=ext.data
port~[08-0B]=mtim.data
port[0C-0E]=vid.color
port[0F]=port0F
port[10]=ramdisk.page
port[14]=AY.data
port[15]=AY.regno
port~[18-1B]=dsk.data
port[1C]=dskctl.data[0]
port[20]=clock.regno
port[21]=clock.data
port[30]=com1.data
port[32]=com2.data
port[50-5F]=hdd.data
port[ED]=gate.call
rst[7]=vid.irq
adjust=4
}
com1 : K580ww51 {
connect="tcp:15015:127.0.0.1"
}
com2 : K580ww51 {
connect="tcp:15016:127.0.0.1"
}
port0F : Register {
read=ramdisk.port0F
write=vid.color
}
mem1 : Memory {
size=10000
}
bios : Memory {
rom="Vector06c\vector.epr"
romselect="Change ROM BIOS"
romfiles="Vector BIOS files (*.epr)|*.epr"
icon=1
}
extrom : Memory {
rom="Vector06c\vector.emr"
romselect="Change external ROM"
romoffset=100
romfiles="ROM files (*.rom)|*.rom"
}
sys : K580ww55 {
portA=kbd.~mask
portB=kbd.~data
portC[0]=cas.record
portC[4]=cas.playback
portC[5-7]=kbd.~data2
}
ext : K580ww55 {
portA=extrom.lsb
portB=extrom.data
portC[0-6]=extrom.msb
}
ramdisk : V06c-MemMap {
cpustate=cpu.state
rom=bios[0000]
stdmem=mem1[0000]
ramdisk="Vector06c\vector.edd"
}
kbd : Keyboard {
layout="Vector06c\layout.kbd"
}
vid : V06c-Video {
mem=mem1[8000]
scroll=sys.portA
control=sys.portB
ruslat=sys.portC[3]
palette.default="80802D2D80802D2D80802D2D80802D2D"
}
mtim : K580wi53 {
clock[0].rate=1/2
clock[1].rate=1/2
clock[2].rate=1/2
gate[0].value=1
gate[1].value=1
gate[2].value=1
}
AY : AY-3-8910 {
freq=1773400
input=sys.portC[0]
input[0]=mtim.out[0]
input[1]=mtim.out[1]
input[2]=mtim.out[2]
}
dsk : KR1818wg93 {
image[0].file="Vector06c\lines.fdd"
image[1].file="Vector06c\stmpro.fdd"
drive[0].tooltip="A:"
drive[1].tooltip="B:"
ext="fdd"
vdpb="2800040F0085017F00C00020000800"
vdpb.boot="Vector06c\lines.fdd"
}
dskctl : K580ww55 {
portA[0]=dsk.drive[0].~on
portA[0]=dsk.drive[1].on
portA[2]=dsk.side[0]
}
cas : tape-recorder {
; áåéñèê 2.5
biproc[2B05-2B55]=rk
biproc[2B05-2B55].check="C5D50E0057DB01E610"
boproc[2B60-2B84]=sp
boproc[2B60-2B84].check="C5D5F5570E087A0757"
; ìîíèòîð-îòëàä÷èê 3.5
tproc[EDDC-EDE2]=rk
tproc[EDDC-EDE2].check="CD1097FB76F3C9"
biproc[F840-F889]=rk
biproc[F840-F889].check="C5D50E0057DB01E610"
boproc[F89B-F8C4]=sp
boproc[F89B-F8C4].check="C5D5F5573E0232FCFF"
; ëñ-ïàñêàëü 2.1 (èíòåðïðåòàòîð)
tproc[2728-272C]=rk
tproc[2728-272C].check="CD2C0176F3"
tproc[2805-280B]=rk
tproc[2805-280B].check="CD2C01FB76F3C9"
biproc[0AEC-0B35]=rk
biproc[0AEC-0B35].check="C5D50E0057DB01E610"
tproc[2646-2648]=rk
tproc[2646-2648].check="CDA726"
boproc[0B41-0B65]=sp
boproc[0B41-0B65].check="C5D5F5570E087A0757"
; ýìóëÿòîð 86ÐÊ/Ìèêðîøè
biproc[FC31-FC7C]=rk
biproc[FC31-FC7C].check="F3C5D50E0057DB01"
boproc[FC7E-FCA7]=rk
boproc[FC7E-FCA7].check="C5D5F5160879074FE601EE01D300"
filter="Vector CAS files (*.cas)|*.cas|RK86 files (*.rk?)|*.rk?"
ext="cas"
noisefilterfreq=3000
}
gate : dosgate {
}
clock : KR512wi1 {
cmos="Vector06c\cmos.dat"
}
hdd : cf-ide {
drive[0].image="Vector06c\vector.hdd"
drive[0].geometry=200C5H18S
}
@svofski
Copy link
Author

svofski commented Jun 1, 2020

vector06c-serialtcp

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment