Last active
July 16, 2022 21:56
-
-
Save svofski/1623c1468a7a90d91d3b797622b19bdc to your computer and use it in GitHub Desktop.
512x256 4 colours demo
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; Вектор-06ц | |
; | |
; Пример рисования в режиме 512x256 4 цвета | |
; | |
.project test512-4col.rom | |
.tape v06c-rom | |
.encoding cp1251 | |
rastint .equ 38h ; прервывание обратного хода луча | |
.org 100h | |
; стандартная точка входа .rom файла | |
di ; запретить прерывания | |
xra a | |
out 10h ; выключить квазидиск | |
Restart: | |
lxi sp, $100 ; инициализировать указатель стека | |
mvi a, 0c9h ; код инструкции RET | |
sta rastint ; инициализировать обработчик RST7 | |
mvi a, 0c3h | |
sta 0 | |
lxi h, Restart | |
shld 1 | |
call clrscr ; очистить экран | |
ei | |
hlt | |
; настроить палитру и включить режим 512 точек | |
lxi h, palette + 15 | |
call colorset | |
; нарисуем четыре цветных прямоугольничка цветами 0, 1, 2, 3 | |
mvi d, 32 | |
mvi l, $90 | |
mvi b, 0 | |
boxes: | |
; выделяем бит 4 и расширяем знак | |
; a = (d & 8) ? 0 : 255 | |
mvi a, 8 | |
ana d | |
rar \ rar \ rar \ rar \ sbb a | |
; старший бит цвета -> плоскости 8, C | |
mvi h, $80 | |
mov m, a | |
mvi h, $c0 | |
mov m, a | |
; a = (d & 4) ? 0 : 255 | |
mvi a, 4 | |
ana d | |
rar \ rar \ rar \ sbb a | |
; младший бит цвета --> плоскости A, E | |
mvi h, $a0 | |
mov m, a | |
mvi h, $e0 | |
mov m, a | |
inr l | |
dcr d | |
jnz boxes | |
; три маленькие диагонали | |
diagonals: | |
mvi a, $80 ; бит пикселей x = 0, 1 | |
sta $e080 ; красный пиксель x = 0, y = $80 | |
sta $a081 ; красный пиксель x = 1, y = $81 | |
sta $c180 ; зеленый пиксель x = 16, y= $80 | |
sta $8181 ; зеленый пиксель x = 17, y= $81 | |
sta $c280 \ sta $e280 ; синий x = 32, y = $80 | |
sta $8281 \ sta $a281 ; синий x = 32, y = $81 | |
rrc ; бит пикселей x = 2, 3 | |
sta $e082 | |
sta $a083 | |
sta $c182 | |
sta $8183 | |
sta $c282 \ sta $e282 | |
sta $8283 \ sta $a283 | |
rrc | |
sta $e084 | |
sta $a085 | |
sta $c184 | |
sta $8185 | |
sta $c284 \ sta $e284 | |
sta $8285 \ sta $a285 | |
; все сделали, стоп | |
di \ hlt | |
; Область временного хранения 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 | |
; Как работает режим 512x256 | |
; Битовые плоскости по старшему разряду: 8 A C E | |
; Индекс палитры формируется так: | |
; Четные столбцы: [0,0,C,E] | |
; Нечетные столбцы: [8,A,0,0] | |
; | |
; Пример 1: однобитный экран в плоскостях A,C, 8,E - обычная память | |
; | |
; 8ACE | |
; | |
; Цвет 0 -> 0000 (все нули, бордюр то же) | |
; 0001 плоскость C = 0, E = 1 -> фон | |
; 1000 плоскость 8 = 1, A = 0 -> фон | |
; Цвет 1 -> 0010 | |
; 0011 | |
; 0100 | |
; 1100 | |
; | |
; Пример 2: 4 цвета | |
; Цвет 0 -> 0000 | |
; Цвет 1 -> 0001 | |
; -> 0100 | |
; Цвет 2 -> 0010 | |
; -> 1000 | |
; Цвет 3 -> 0011 | |
; -> 1100 | |
; | |
; | |
; | |
; index & 03 | |
; 8 A C E | |
; x x 0 0 0 | |
; x x 0 1 1 | |
; x x 1 0 2 | |
; x x 1 1 3 | |
; index & 0c | |
; 0 0 x x 0 | |
; 0 1 x x 1 | |
; 1 0 x x 2 | |
; 1 1 x x 3 | |
WHITE .equ 377q | |
RED .equ 007q | |
GREEN .equ 070q | |
BLUE .equ 300q | |
C0 .equ WHITE | |
C1 .equ RED | |
C2 .equ GREEN | |
C3 .equ BLUE | |
palette | |
color_4 | |
.db C0 ; 0 = все нули: бордюр и когда все плоскости в 0 | |
.db C1 | |
.db C2 | |
.db C3 | |
.db C1 | |
.db 0 | |
.db 0 | |
.db 0 | |
.db C2 | |
.db 0 | |
.db 0 | |
.db 0 | |
.db C3 | |
.db 0 | |
.db 0 | |
.db 0 | |
; палитра для однобитного цвета в плоскости C,A | |
color_1 | |
.db C0 ; 0 = все нули: бордюр и когда все плоскости в 0 | |
.db C0 ; xx11 | |
.db C1 ; xx10 | |
.db C1 | |
.db C1 | |
.db 0 | |
.db 0 | |
.db 0 | |
.db C0 | |
.db 0 | |
.db 0 | |
.db 0 | |
.db C1 | |
.db 0 | |
.db 0 | |
.db 0 | |
; h points to palette + 15 | |
colorset: | |
mvi a, 88h | |
out 0 | |
mvi c, 15 | |
colorset1: | |
mov a, c | |
out 2 | |
mov a, m | |
out 0Ch | |
dcx h | |
out 0Ch | |
out 0Ch | |
dcr c | |
out 0Ch | |
out 0Ch | |
out 0Ch | |
jp colorset1 | |
; включить режим 512 точек | |
mvi a, $10 | |
out 2 | |
; сбросить прокрутку | |
mvi a, 255 | |
out 3 | |
ret |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment