Skip to content

Commit

Permalink
Первая версия Hello World
Browse files Browse the repository at this point in the history
  • Loading branch information
w0rm49 committed Apr 13, 2018
1 parent df6c3d0 commit 3eb9d8b
Showing 1 changed file with 200 additions and 1 deletion.
201 changes: 200 additions & 1 deletion src/hello_world.asm
@@ -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:

0 comments on commit 3eb9d8b

Please sign in to comment.