#04 — И целого байта мало… | Берем БК за рога
На прошлой неделе =RMDA= выпустила свой первый релиз для легендарного советского компьютера «Электроника БК-0011М» и я хочу рассказать вам некоторые подробности. Вот сама работа: Gift 2020
Это gift — такой тип поздравительных intro, обычно приуроченных к дням рождения. Так получилось, что к моменту завершения работы у двух видных деятелей российской демосцены синхронно случился день рождения и мы решили немного переформатировать этот релиз в гифт, чтобы все остались довольны. В остальном, перед нами обычное intro/demo никак не связанное с ограничениями по размерам.
Программировать на БК не сложнее и не проще чем на любом другом устройстве. Берешь средства разработки, мануалы, готовые библиотеки кода, соединяешь все вместе и добавляешь к этому свою идею. Средств разработки для БК очень много, справочной информации еще больше. Фактически, все что делалось на БК до 1997 года это один непрерывный пласт справочной информации. Есть даже весьма приличный эмулятор, который продолжают обновлять на переодической основе, правда он строго под Windows.
В чем же проблема? В чем технологический вызов? Особенно если мы пишем банальный HELLO WORLD для новой платформы?
На демосцене принято снабжать релизы .NFO-файлом, где как раз и описаны, кратко, но емко, все детали происходящего. Фактически, статья на Хабре не нужна, если вы умеете читать .NFO:
________ ___ ____ _______ ________
__\ \ _/ \/ \ _/ \ __\ \__
\__ __ \\ \ \\ __ \\__ __ _/
/ |/ __/ _/_ |/ _/_/ |/ /_
\ / \_ / / \ \
\____\___//___\ /___/____________/\_____\___/
\/ redefine the future!
gift 2020
demo, Elektronika BK0011M + AY-8910
code - siniy
alarm - okin
farted by ded
YouTube: sorry, no YouTube, BK is too hard even for RMDA
HowTO:
1) Download emulator here http://gid.pdp-11.ru
2) Install it and find installation directory
3) Replace /image/MKDOS513.IMG with file from our release
4) Launch emulator
5) In NC-style enviroment navigate up, change dir/disk
6) Find gft2o2o.com file and press Enter
7) AY-8910 must be enabled
8) Assembler+devtools also available at http://gid.pdp-11.ru
BK - shit na veka!
RMDA 2020 @ https://rmda.su
02/04/2020
russkie idut...
В рамках этого цикла статей на Хабре мы конечно преследуем образовательные цели. Рассказываем вам о демосцене, но при этом не ставим целей научить вас программировать на ассемблере. Работа выше это всего лишь три слайда меняющихся под музыку. Это очень и очень просто, но давайте посмотрим в код:
CALL CLS
MOV #msg3,R5
MOV #40000+4.+0x1B00,R0
CALL PRT
MOV #8.,R0 ;сколько пустых циклов
CLR R1
L1: SOB R1,L1
SOB R0,L1
MOV #32768.,R0
MOV R0,COL
;T: BR T
;setup timer
START:
MOV #TICK,@#100
MOV #2,@#102
CLR @#177662 ;вкл таймер, 0 палитра
SSH:
;load picture
MOV #File_002,R1
EMT 36
MOV #msg1,R5
MOV #40000+27.,R0
ADD #0x3600,R0
CALL PRT
;play song
MOV #1,R0
MOV R0,PSGPA
MOV #SONG+16.,R0
MOV R0,PSGPO
CALL PL
CALL CLS
MOV #File_001,R1
EMT 36
MOV #msg2,R5
MOV #40000+16.,R0
ADD #0x3600,R0
CALL PRT
;play song
MOV #1,R0
MOV R0,PSGPA
MOV #SONG+16.,R0
MOV R0,PSGPO
CALL PL
CALL CLS
JMP SSH
;TT: BR TT
CLS:
MOV #40000,R0
CL:
CLR (R0)+
TST R0
BPL CL
RET
;**************************************************************************************
;play song
PL: WAIT
MOV PSGPA,R0
TST R0
BEQ PSGA
DEC R0
MOV R0,PSGPA
BR PL
PSGA:
MOV PSGPO,R0
dumpreg:
MOVB (R0)+,R1
BIC #0xFF00,R1
CMP #0xFF,R1
BEQ stoplay
CMP #0xFE,R1
BNE nogetwait
MOVB (R0)+,R2
BIC #0xFF00,R2
ASL R2
ASL R2
MOV R2,PSGPA
BR stoplay
nogetwait:
CMP #0xFD,R1
BEQ stoplay2
COMB R1
MOV R1,@#177714
MOVB (R0)+,R1
BIC #0xFF00,R1
COMB R1
MOVB R1,@#177714
BR dumpreg
stoplay2:
RET ;MOV #SONG+16.,R0
stoplay:
MOV R0,PSGPO
JMP PL
;**************************************************************************************
TICK:
RTI
PSGPA: .WORD 1
PSGPO: .WORD SONG+16.
SONG:
.byte 0x50,0x53,0x47,0x1A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
----тут пропущены данные трека, смотрите полный исходник в архиве
.byte 0x0F,0x09,0x10,0x0A,0x0F,0x0B,0x46,0x0D,0x0C,0xFE,0x01,0x00,0xA1,0x04,0x16,0x0B
.byte 0xFD ; end of song
.EVEN
;--------------------------------------------------------------
COL: .WORD 49152.;32768.
PRT:
tout:
MOVB (R5)+,R3
SUB #32.,R3
BIC #0xFF00,R3
;*10
ADD R3,R3;*2
MOV R3,R1
ADD R3,R3;*4
ADD R3,R3;*8
ADD R3,R1;*10
ADD #112276,R1
MOV R0,-(SP)
MOVB #10.,4(SP)
cf:
MOVB (R1)+,R2
;make for standart
MOVB #8.,6(R6)
MOV #0,R3
m2:
ASR R2
BCC m3
BIS @#COL,R3
m3:
CLC
ROR R3
ROR R3
DECB 6(R6)
BNE m2
MOV R3,(R0);+
ADD #64.,R0
DECB 4(SP)
BNE cf
MOV (SP)+,R0
INC R0
INC R0
TSTB (R5)
BNE tout
RET
;--------------------------------------------------------------
msg1: .ascii /2 may 1945/
.byte 0
msg2: .ascii /Russkie idut.../
.byte 0,0
msg3: .ascii /Happy birthday Tim & Random!/
.byte 0,0
File_001:
.WORD 3,0,0 ; 1=флаг чтения, адрес загрузки, длина (0! при чтении)
.ASCII "PO1 " ;имя 16 байт
.BYTE 5,6 ;страницы 40-100, 100-140 (если WORD -1., то в текущие)
.BLKB 20. ;инфа о загруженном файле
File_002:
.WORD 3,0,0 ; 1=флаг чтения, адрес загрузки, длина (0! при чтении)
.ASCII "PO2 " ;имя 16 байт
.BYTE 5,6 ;страницы 40-100, 100-140 (если WORD -1., то в текущие)
.BLKB 20. ;инфа о загруженном файле
.EVEN
.END
ВАЖНО! Не пытайтесь собрать код из статьи! Он специально сокращен и отформатирован под нормальную читаемость на Хабре. Если вы хотите собрать работу сами — используйте оригинальный архив на Pouet и папку /source. Стоит сразу признат — эта работа сделана далеко не честь по чести, но для первого опыта на неведомом ранее компьютере все вполне прилично. Возможно, уже после Revision Online 2020 мы сделаем более продвинутую, финальную версию этого гифта. Возможно…
Какие выводы мы сделали из проекта на БК? С одной стороны все прекрасно, есть средства разработки, есть документация. То что БК ужасная архитектура мы знали и так. Однако, никто не ожидал после ZX и PC столкнутся с ситуацией ТОТАЛЬНОГО ОТСУТСТВИЯ самых базовых процедур и библиотек. Например, мы совершенно небыли готовы к тому, что для проигрывания готового chiptune-трека (сирена) написанного в Vortex Tracker нам понадобится помощь самого Manwe_SandS. И речь не о том, что на БК в порты звукового чипа AY нужно отправлять инвертированные значения, это пол беды. У людей за 20 лет просто не появилось банального плеера PT3, хотя в 90-ых годах огромное количество музыки с ZX Spectrum переносилось на БК в несколько кликов мышью. Вот так, за 20 лет бездействия, сцена легендарного советского компьютера полностью утратила духовность.
Ничего, =RMDA= поможет!
В остальном, БК это весело и задорно! Смело берите БК за рога! Спасибо.
---EOF---
-01 — И целого байта мало… | Пилот)
#00 — ИЦБМ… | Приглашение на Revision Online 2020
#01 — ИЦБМ… | Какими бывают intro?
#02 — ИЦБМ… | The Cross of Changes
#03 — ИЦБМ… | 2B or not 2B
#04 — ИЦБМ… | Берем БК за рога
Развлекательный канал деда в Телеграм: teleg.run/bornded
Рядом с каналом есть чат. В нем можно попробовать поднять вопросы за демосцену, ассемблер, пиксель-арт, трекерную музыку и другие аспекты процессы. Вам могут ответить либо отправят в другие, более тематические чаты.
ТАК ПОБЕЖДАЛИ — ТАК ПОБЕДИМ!