#04 — И целого байта мало… | Берем БК за рога

На прошлой неделе =RMDA= выпустила свой первый релиз для легендарного советского компьютера «Электроника БК-0011М» и я хочу рассказать вам некоторые подробности. Вот сама работа: Gift 2020

image

Это 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

Рядом с каналом есть чат. В нем можно попробовать поднять вопросы за демосцену, ассемблер, пиксель-арт, трекерную музыку и другие аспекты процессы. Вам могут ответить либо отправят в другие, более тематические чаты.

ТАК ПОБЕЖДАЛИ — ТАК ПОБЕДИМ!

© Habrahabr.ru