Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
200 additions
and
1 deletion.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,200 @@ | ||
;Здесь будет наш код =) | ||
; Описание формата рома | ||
|
||
.memorymap | ||
defaultslot 0 | ||
slotsize $4000 | ||
slot 0 $0000 | ||
slot 1 $4000 | ||
.endme | ||
|
||
.rombankmap | ||
bankstotal 2 | ||
banksize $4000 | ||
banks 2 | ||
.endro | ||
|
||
.sdsctag 1.0, "", "", "" | ||
|
||
; Банк 0 слот 0 | ||
|
||
.bank 0 slot 0 | ||
.org $0000 | ||
di ; отключаем обработку маскируемых прерываний | ||
im 1 ; переводим процессор в режим прерываний 1 | ||
ld sp, $dff0 ; укажем начало стека, | ||
; то есть установим его вершину по адресу $dff0 | ||
|
||
jp main ; переход к метке main | ||
|
||
.org $0038 ; обработчик маскируемого прерывания | ||
ei ; включить прерывания | ||
reti ; возврат из прерывания | ||
|
||
.org $0066 ; обработчик немаскируемого прерывания | ||
retn ; возврат из немаскируемого прерывания | ||
|
||
|
||
; здесь продолжается основная программа | ||
|
||
main: | ||
|
||
; Инициализация регистров VDP | ||
|
||
ld hl, VdpInit | ||
ld b, VdpInitEnd-VdpInit | ||
ld c, $bf | ||
otir | ||
|
||
|
||
; Очищаем видеопмять | ||
|
||
; Нам нужно отправить команду $4000 | ||
; запись в VRAM начиная с адреса $0000 | ||
; %01000000 %0000000 = $4000 | ||
|
||
ld a, $00 ; Отправляем младший байт команды | ||
out ($bf),a ; $00 | ||
ld a, $40 ; Отправляем старший байт команды | ||
out ($bf),a ; $04 | ||
|
||
ld bc, $4000 ; Используем регистр bc как счётчик | ||
; Мы $4000 раз отправим ноль, чтобы забить ими всю память | ||
ClearVRAMLoop: | ||
ld a, $00 ; загружаем в a $00 | ||
out ($be), a ; отправляем содержимое регистра A в порт $be | ||
dec bc ; уменьшаем счётчик на единицу | ||
ld a, b ; теперь нам необходимо проверить обнулился ли регистр bc | ||
or c ; мы просто делаем битовое "или" между старшим и младшим байтом | ||
; результат будет равен нулю только в случае | ||
; когда оба байта равны нулю | ||
|
||
jp nz, ClearVRAMLoop | ||
|
||
; Нам нужно отправить команду $c000 | ||
; запись в CRAM начиная с адреса $0000 | ||
; %11000000 %0000000 = $c000 | ||
|
||
ld a, $00 ; Отправляем младший байт команды | ||
out ($bf), a ; $00 | ||
ld a, $c0 ; Отправляем старший байт команды | ||
out ($bf), a ; $c0 | ||
|
||
ld hl, PaletteData ; Адрес начала отправляемой последовательности | ||
ld b, (PaletteDataEnd-PaletteData) ; Количество отправляемых байт | ||
ld c, $be ; Номер порта | ||
otir ; Отправка | ||
|
||
|
||
; Загружаем шрифт | ||
|
||
ld a, $00 ; Нам нужно отправить команду $4000 | ||
out ($bf), a ; запись в VRAM начиная с адреса $0000 | ||
ld a, $40 ; %01000000 %0000000 = $c000 | ||
out ($bf), a | ||
|
||
ld hl, TilesetData ; Начало данных тайлсета | ||
ld bc, TilesetDataEnd-TilesetData ; Количество байт | ||
TilesetLoop: | ||
ld a, (hl) ; Получить текущий байт по адресу hl | ||
out ($be), a ; Отправить в порт данных | ||
inc hl ; Изменяем указатель чтобы | ||
; он указывал на следующий байт | ||
dec bc ; Уменьшаем счётчик | ||
ld a, b ; Проверяем обнулился ли счётчик, | ||
; и если нет то повторяем | ||
or c | ||
jp nz, TilesetLoop | ||
|
||
|
||
; Выводим сообщение | ||
|
||
ld a, $00 ; Нам нужно отправить команду $7800 | ||
out ($bf), a ; запись в VRAM начиная с адреса $3800 | ||
ld a, $78 ; $4000 | $3800 = $7800 | ||
out ($bf), a | ||
|
||
ld hl, Message | ||
ld b, MessageEnd-Message | ||
ld c, $be | ||
otir | ||
|
||
|
||
; Включаем экран | ||
|
||
ld a, $40 | ||
out ($bf), a | ||
ld a, $81 | ||
out ($bf), a | ||
|
||
|
||
; Остановка | ||
|
||
End: jp End | ||
|
||
|
||
; Даные | ||
|
||
VdpInit: | ||
.db $04,$80,$00,$81,$ff,$82,$ff,$85,$ff,$86,$ff,$87,$00,$88,$00,$89,$ff,$8a | ||
VdpInitEnd: | ||
|
||
PaletteData: | ||
.db $00,$3f,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | ||
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | ||
PaletteDataEnd: | ||
|
||
Message: | ||
.db $12,$00,$0f,$00,$16,$00,$16,$00,$19,$00,$30,$00 ; HELLO | ||
.db $21,$00,$19,$00,$1c,$00,$16,$00,$0e,$00 ; WORLD | ||
MessageEnd: | ||
|
||
TilesetData: | ||
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ; " " | ||
.db $7C,$00,$00,$00,$86,$00,$00,$00,$8A,$00,$00,$00,$92,$00,$00,$00,$A2,$00,$00,$00,$C2,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00 ; 0 | ||
.db $10,$00,$00,$00,$30,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00 ; 1 | ||
.db $7C,$00,$00,$00,$82,$00,$00,$00,$02,$00,$00,$00,$1C,$00,$00,$00,$60,$00,$00,$00,$80,$00,$00,$00,$FE,$00,$00,$00,$00,$00,$00,$00 ; 2 | ||
.db $FE,$00,$00,$00,$04,$00,$00,$00,$18,$00,$00,$00,$04,$00,$00,$00,$02,$00,$00,$00,$82,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00 ; 3 | ||
.db $0C,$00,$00,$00,$14,$00,$00,$00,$24,$00,$00,$00,$44,$00,$00,$00,$84,$00,$00,$00,$FE,$00,$00,$00,$04,$00,$00,$00,$00,$00,$00,$00 ; 4 | ||
.db $FC,$00,$00,$00,$80,$00,$00,$00,$FC,$00,$00,$00,$02,$00,$00,$00,$02,$00,$00,$00,$82,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00 ; 5 | ||
.db $7C,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$FC,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00 ; 6 | ||
.db $FE,$00,$00,$00,$82,$00,$00,$00,$04,$00,$00,$00,$08,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$00,$00,$00,$00 ; 7 | ||
.db $7C,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$7C,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00 ; 8 | ||
.db $7C,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$7E,$00,$00,$00,$02,$00,$00,$00,$02,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00 ; 9 | ||
.db $38,$00,$00,$00,$44,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$FE,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$00,$00,$00,$00 ; A | ||
.db $FC,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$FC,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$FC,$00,$00,$00,$00,$00,$00,$00 | ||
.db $7C,$00,$00,$00,$82,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$82,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00 | ||
.db $F8,$00,$00,$00,$84,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$84,$00,$00,$00,$F8,$00,$00,$00,$00,$00,$00,$00 | ||
.db $FE,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$FC,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$FE,$00,$00,$00,$00,$00,$00,$00 | ||
.db $FE,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$FC,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$00,$00,$00,$00 | ||
.db $7C,$00,$00,$00,$82,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$8E,$00,$00,$00,$82,$00,$00,$00,$7E,$00,$00,$00,$00,$00,$00,$00 | ||
.db $82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$FE,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$00,$00,$00,$00 | ||
.db $7C,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00 | ||
.db $1E,$00,$00,$00,$04,$00,$00,$00,$04,$00,$00,$00,$04,$00,$00,$00,$04,$00,$00,$00,$84,$00,$00,$00,$78,$00,$00,$00,$00,$00,$00,$00 | ||
.db $84,$00,$00,$00,$88,$00,$00,$00,$90,$00,$00,$00,$F0,$00,$00,$00,$88,$00,$00,$00,$84,$00,$00,$00,$82,$00,$00,$00,$00,$00,$00,$00 | ||
.db $40,$00,$00,$00,$40,$00,$00,$00,$40,$00,$00,$00,$40,$00,$00,$00,$40,$00,$00,$00,$40,$00,$00,$00,$7E,$00,$00,$00,$00,$00,$00,$00 | ||
.db $82,$00,$00,$00,$C6,$00,$00,$00,$AA,$00,$00,$00,$92,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$00,$00,$00,$00 | ||
.db $82,$00,$00,$00,$C2,$00,$00,$00,$A2,$00,$00,$00,$92,$00,$00,$00,$8A,$00,$00,$00,$86,$00,$00,$00,$82,$00,$00,$00,$00,$00,$00,$00 | ||
.db $7C,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00 | ||
.db $FC,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$FC,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$00,$00,$00,$00 | ||
.db $7C,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$92,$00,$00,$00,$8A,$00,$00,$00,$84,$00,$00,$00,$7A,$00,$00,$00,$00,$00,$00,$00 | ||
.db $FC,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$84,$00,$00,$00,$F8,$00,$00,$00,$84,$00,$00,$00,$82,$00,$00,$00,$00,$00,$00,$00 | ||
.db $7C,$00,$00,$00,$80,$00,$00,$00,$80,$00,$00,$00,$7C,$00,$00,$00,$02,$00,$00,$00,$02,$00,$00,$00,$FC,$00,$00,$00,$00,$00,$00,$00 | ||
.db $FE,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$00,$00,$00,$00 | ||
.db $82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00 | ||
.db $82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$44,$00,$00,$00,$28,$00,$00,$00,$10,$00,$00,$00,$00,$00,$00,$00 | ||
.db $82,$00,$00,$00,$82,$00,$00,$00,$82,$00,$00,$00,$92,$00,$00,$00,$AA,$00,$00,$00,$C6,$00,$00,$00,$82,$00,$00,$00,$00,$00,$00,$00 | ||
.db $82,$00,$00,$00,$44,$00,$00,$00,$28,$00,$00,$00,$10,$00,$00,$00,$28,$00,$00,$00,$44,$00,$00,$00,$82,$00,$00,$00,$00,$00,$00,$00 | ||
.db $82,$00,$00,$00,$44,$00,$00,$00,$28,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$00,$00,$00,$00 | ||
.db $FE,$00,$00,$00,$04,$00,$00,$00,$08,$00,$00,$00,$10,$00,$00,$00,$20,$00,$00,$00,$40,$00,$00,$00,$FE,$00,$00,$00,$00,$00,$00,$00 | ||
.db $1C,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$1C,$00,$00,$00,$00,$00,$00,$00 | ||
.db $80,$00,$00,$00,$40,$00,$00,$00,$20,$00,$00,$00,$10,$00,$00,$00,$08,$00,$00,$00,$04,$00,$00,$00,$02,$00,$00,$00,$00,$00,$00,$00 | ||
.db $70,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$10,$00,$00,$00,$70,$00,$00,$00,$00,$00,$00,$00 | ||
.db $10,$00,$00,$00,$28,$00,$00,$00,$44,$00,$00,$00,$82,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | ||
.db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$FE,$00,$00,$00,$00,$00,$00,$00 | ||
.db $00,$00,$00,$00,$30,$00,$00,$00,$30,$00,$00,$00,$00,$00,$00,$00,$30,$00,$00,$00,$30,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | ||
.db $00,$00,$00,$00,$30,$00,$00,$00,$30,$00,$00,$00,$00,$00,$00,$00,$30,$00,$00,$00,$10,$00,$00,$00,$20,$00,$00,$00,$00,$00,$00,$00 | ||
.db $08,$00,$00,$00,$10,$00,$00,$00,$20,$00,$00,$00,$40,$00,$00,$00,$20,$00,$00,$00,$10,$00,$00,$00,$08,$00,$00,$00,$00,$00,$00,$00 | ||
.db $00,$00,$00,$00,$00,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00,$7C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 | ||
.db $20,$00,$00,$00,$10,$00,$00,$00,$08,$00,$00,$00,$04,$00,$00,$00,$08,$00,$00,$00,$10,$00,$00,$00,$20,$00,$00,$00,$00,$00,$00,$00 | ||
.db $3C,$00,$00,$00,$42,$00,$00,$00,$02,$00,$00,$00,$0C,$00,$00,$00,$10,$00,$00,$00,$00,$00,$00,$00,$10,$00,$00,$00,$00,$00,$00,$00 | ||
TilesetDataEnd: |