Всем привет! Пока поколение 2-х тысячных на PlayGround.ru обижается на Нотча, на западе во всю балуются с эмулятором виртуального процессора DCPU-16! Так вот почему бы и нам не заняться этим же? Ну, я начну. Hello world:
set i, 0 ; Очищаем регистр I, потому как ; он будет выполнять роль "курсора".
set a, 0 ; Подготавливаемся к выполнению set b, 0x8000 ; прерывания.
:main set c, [write_hw + i] ; Записываем в регистр C код буквы, номер ; которой записан в регистр I.
ife i, 13 ; Если выведено все слово, то set pc, end ; зациклить программу.
add i, 1 ; Прибавляем к регистру I единицу.
add c, 0xf000 ; Добавляем букве цвет и цвет фона.
set [0x8000 + i], c ; Устанавливаем в ячейку памяти, номер ; которой записан в регистр I готовый символ.
hwi [display_address] ; Вызываем прирывание в устройстве ; dilplay_address.
set pc, main ; Переходим к метке main.
:get_display add [display_address], 1 ; Прибавляем к выделенной ; ячейки памяти display_address ; единицу.
hwq [display_address] ; "Достаем" информацию ; об устройстве, номер которого ; записан в ячейке памяти.
ifn b, 0x7349 ; Если номер устройства ifn a, 0xf615 ; не совпадает с номером set pc, get_display ; дисплея, то переставить ; счетчик команд к метке ; get_display.
set pc, pop ; В противном случае ; завершить выполнение процедуры.
:display_address ; Выделяем ячейку памяти dat 0xffff ; display_address и записываем ; туда 0xffff.
:write_hw ; Выделяем ячейку памяти dat " Hello world!" ; write_hw и записываем туда ; " Hello world!"
:end ; Бесконечный цикл. set pc, end
Мда, только вот плохо, что убираются "лишние" пробелы.
Я в Ассемблере-DCPU еще не очень силен, так что Hello world это единственное, достойное демонстрации. Остальное надо чуть-ли не полностью переписывать.
Всем привет! Пока поколение 2-х тысячных на PlayGround.ru обижается на Нотча, на западе во всю балуются с эмулятором виртуального процессора DCPU-16! Так вот почему бы и нам не заняться этим же? Ну, я начну.
Hello world:
jsr get_display ; Выполняем процедуру поиска
; дисплея.
set i, 0 ; Очищаем регистр I, потому как
; он будет выполнять роль "курсора".
set a, 0 ; Подготавливаемся к выполнению
set b, 0x8000 ; прерывания.
:main
set c, [write_hw + i] ; Записываем в регистр C код буквы, номер
; которой записан в регистр I.
ife i, 13 ; Если выведено все слово, то
set pc, end ; зациклить программу.
add i, 1 ; Прибавляем к регистру I единицу.
add c, 0xf000 ; Добавляем букве цвет и цвет фона.
set [0x8000 + i], c ; Устанавливаем в ячейку памяти, номер
; которой записан в регистр I готовый символ.
hwi [display_address] ; Вызываем прирывание в устройстве
; dilplay_address.
set pc, main ; Переходим к метке main.
:get_display
add [display_address], 1 ; Прибавляем к выделенной
; ячейки памяти display_address
; единицу.
hwq [display_address] ; "Достаем" информацию
; об устройстве, номер которого
; записан в ячейке памяти.
ifn b, 0x7349 ; Если номер устройства
ifn a, 0xf615 ; не совпадает с номером
set pc, get_display ; дисплея, то переставить
; счетчик команд к метке
; get_display.
set pc, pop ; В противном случае
; завершить выполнение процедуры.
:display_address ; Выделяем ячейку памяти
dat 0xffff ; display_address и записываем
; туда 0xffff.
:write_hw ; Выделяем ячейку памяти
dat " Hello world!" ; write_hw и записываем туда
; " Hello world!"
:end ; Бесконечный цикл.
set pc, end
Мда, только вот плохо, что убираются "лишние" пробелы.
Я в Ассемблере-DCPU еще не очень силен, так что Hello world это единственное, достойное демонстрации. Остальное надо чуть-ли не полностью переписывать.