; 🐟 для Вектора-06ц .project helv06c.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 ; элегантно зависнуть di hlt msg: db 'HELLO, WORLD!',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