NewsProductsSprinterSupportDownloadSprinter ForumAbout usLinksSite map Russian site

Russian
   >> Программирование для компьютера Sprinter
Thread views: 96 View all threadsNext thread*Threaded Mode

Shaos
(Registered Developer)
2003/04/27 00:37
Sprinter SDK Reply to this post

Уроки по Sprinter SDK уже в онлайне !!!
http://shaos.ru/nedopc/sprinter/sdk/main_r.htm


Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

Shaos
(Registered Developer)
2003/06/23 18:36
Re: Sprinter SDK new [re: Shaos]Reply to this post

Как вам наш новый баннер? ;)





Alex_GoryachevAdministrator
(Sprinter Team)
2003/06/24 10:48
Re: Sprinter SDK new [re: Shaos]Reply to this post

Выглядит лучше эмулятора.

---
Sprinter Team
PETERS PLUS LTD

Shaos
(Registered Developer)
2003/06/24 17:14
Re: Sprinter SDK new [re: Alex_Goryachev]Reply to this post

> Выглядит лучше эмулятора.

Ну если еще вспомнить, что эмулятор выглядит как экран компьютера Спринтер ;)

Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

Shaos
(Registered Developer)
2003/07/28 00:50
Re: Sprinter SDK new [re: Shaos]Reply to this post

Пора сказать пару слов о том, как в SDK обращаться к функциям Estex и BIOS :)

Итак, когда вы пишете на RW1 вызов функции
func(1,2,3)
то это превращается препроцессором в
A=1;B=2;C=3;call func
и чтобы передать какие-то данные в ассемблер, нам нужно научиться читать регистры A,B и C
напоминаю как использовать ассемблер:
say "\! ld a,b"
итак, чтобы прочитать регистр A, используем:
say "\! ld hl,(_reg_a)"
для регистров B и C соответственно
say "\! ld hl,(_reg_b)" и say "\! ld hl,(_reg_c)"
обратно функция может возвращать резуьтаты в тех же регситрах A,B,C, но наиболее устоявшийся вариант для RW1 - это регистр L:
say "\! ld (_reg_l),hl"
чуть сложнее получается значение адреса func(&array)

say "\! ld de,(_reg_a)" // значение в ячейках переменных
say "\! ld hl,(_l_base)" // получение базового адреса переменных
say "\! add hl,de"
say "\! add hl,de" // теперь в hl адрес переменной или массива

если мы зададим строку в виде
def arr[5]='str'
то будем иметь массив 0x0002, 0x7473, 0x0072, 0x0000, 0x0000 (т.е. "пакет" из двух слов, каждый байт которых будет передавать букву) и чтобы передать указатель на такую строку в функцию на ассемблере придется сдвинуться на 1 ячеку, т.е. писать так:
func(&str+1)
либо прибавлять два байта внутри функции на ассемблере. К слову если строку задавать в двойных кавычках, то на одно слово будет приходиться одна буква, а не две.

Вот примерчик, который будет запускать какой-нибудь EXE-шник :)

robot "Exec"
author "Shaos"
main()
{
def name[10]='fn.exe'
exec(&name+1)
say "\! call exit"
}

exec() // (&filename+1)
{
say "\! ld de,(_reg_a)"
say "\! ld hl,(_l_base)"
say "\! add hl,de"
say "\! add hl,de"
say "\! ld bc,0040h"
say "\! rst 10h"
}



Alexander Shabarshin (shaos@mail.ru)
NedoPC Project

cr0acker
(enthusiast)
2003/07/28 10:00
Re: Sprinter SDK new [re: Shaos]Reply to this post

Круто:) СДК и Ассемблер едины! Когда мы говорим СДК, мы подрозумеваем АСМ! Когда мы говорим АСМ, мы подрозумеваем СДК! ура товарищи! УРА!
Выдержка из 21 сьезда НедоПЦ.



Shaos
(Registered Developer)
2003/07/28 10:17
Re: Sprinter SDK new [re: cr0acker]Reply to this post

> ура товарищи

Ура! В зале раздаются бурные аплодисменты :)

Дополнение:
чтобы вставить ваш целиком асмовый кусок в код, ищите в вашем SHJ-проекте строку:
\add ${name}.a include '${EXEPATH}lib/z80/sprinter/back_sp.a'
и вставляете следом за ней что-то аналогичное, но со своим файлом, например:
\add ${name}.a include 'mycode.asm'
а потом на RW1 можно вызывать функции из этого кода через
say "\! call mysub"


Alexander Shabarshin (shaos@mail.ru)
NedoPC Project


View all threadsNext thread*Threaded Mode
Jump to