POUR CE TUTORIAL JE PRESUPPOSE QUE VOUS AVEZ INSTALLE PANTHER
Avant tout, ce tutorial n'utilise de panther que sa structure de répertoires.
La compilation de projet est, me semble-t-il un peu douteuse (surout pour les pièces attachées...)
#include <lynx.h>
#include <lynxlib.h>
#define SCREEN 0xa000
#define TRUE 1
#define FALSE 0
/* standard palette */
char pal[] = {
0x00,0x00,0x08,0x00,0x00,0x08,0x08,0x08,0x04,0x00,0x0F,0x00,0x00,0x0F,0x0F,0x0F,
0x00,0x08,0x00,0x80,0x88,0x80,0x08,0x88,0x44,0x0F,0x00,0xF0,0xFF,0xF0,0x0F,0xFF
};
char WaitButton(){
char key;
while ( (key = joystick) == 0);
while ( joystick );
return key;
}
void main() {
#asm
lda #$c /* Vector space + ROM space --> FFFA-FFFF + FE00-FFF7 */
sta $fff9 /* MAPCTL */
cli /* <= Très important, ne pas oublier*/
#endasm
/* set up buffer : display buffer == render buffer, no collision buffer */
SetBuffers(SCREEN,(char *)0,(char *)0 );
/* set the palette */
SetRGB(pal);
for (;;){ //on boucle à l'infini
DrawFBox(0, 0, 160, 102, 3);//on remplit l'écran
TextOut2Ext(0, 5*11, 2, 3, "Vince is in ", 0x190, 0x0200);//toi aussi mets ton prénom :D
TextOut2Ext(0, 5*11+19, 2, 3, "ze place !", 0x190, 0x0200);//dans l'ordre:x,y,couleur,couleur de fond,texte,stretchx,strectchy
WaitButton();
/* Clear the screen */
DrawFBox(0, 0, 160, 102, 3);
TextOut2(0, 5*11, 2, 3, "Vince is in ze place !");//la même chose sur une ligne sans zoom
WaitButton();
}
}
//J'ai ajouté le code TO2.M65 pour ceux qui ne l'auraient pas...
#asm
;*********************************************
;** Writes a text at a given pixel-postion **
;*********************************************
;** 19.08.1997 Matthias Domin **
;** 20.08.1997 modified by 42Bastian Schick **
;** 27.11.1997 call to DrawSprite directly **
;** 14.06.1998 Changed to use 8*8 charset **
;*********************************************
;
; C: void TextOut2(int x,int y,char forecol, char backcol, char *pText)
; C: void TextOut2Ext(int x,int y,char forecol, char backcol, char *pText, int stretchx, int stretchy)
;
; exported functions,labels:
global _TextOut2
global _TextOut2Ext
; imported functions/labels
xref popax
xref DrawSprite
;>ptr1 = $8C
;>ptr2 = $8E
;>ptr3 = $90
;>tmp1 = $92
;>tmp2 = $93
;>tmp3 = $94
;>tmp4 = $95
_TextOut2Ext:
; get stretch-factor
jsr popax
sta text2scbstretchy ; lo
stx text2scbstretchy+1 ; hi
jsr popax
sta text2scbstretchx ; lo
stx text2scbstretchx+1 ; hi
bra TextOutGoOn
_TextOut2:
ldx #1
stz text2scbstretchy ; lo
stx text2scbstretchy+1 ; hi
stz text2scbstretchx ; lo
stx text2scbstretchx+1 ; hi
TextOutGoOn
; get string pointer
jsr popax
sta ptr1 ; lo
stx ptr1+1 ; hi
; get background color
jsr popax ; if backcolor != 0, set sprite to be opaque, else set it transparent
stz text2scb
and #$f
sta tmp1
bne spritemode_ok
lda #4
sta text2scb
spritemode_ok
jsr popax ; get forecolor
asl A
asl A
asl A
asl A
ora tmp1
sta text2scbcolor
; get y
jsr popax
sta text2scby
stx text2scby+1
; get x
jsr popax
sta text2scbx
stx text2scbx+1
******** 42BS **
ldy #-1
string_loop iny
lda (ptr1),y
bne string_loop
****************
cpy #20
bmi store_stringlen
ldy #20
store_stringlen
sty tmp4 ; text_len
bne text_ok
rts ; no text => ende
text_ok:
iny
iny
sty tmp3 ; text_off
ldy #8-1 ; 8 pixel lines per character
ldx #0
clc
text_prep1:
lda tmp3 ; text_off
sta text2buffer,x
txa
adc tmp3 ; text_off
tax
lda #$ff
sta text2buffer-1,x
dey
bpl text_prep1
stz text2buffer,x
****************
stz tmp2
;> ldy #0
iny
text_outloop
lda (ptr1),y ; while (*ptr) { z= *ptr
;beq text_out
; not needed, because we now use while (len--)
sty tmp1
sec
sbc #32
;; sta ptr3 ; start calculating the char-data-address
stz ptr3 ;; Nur noch mal 8
stz ptr3+1
asl A ; 1. shift ; no carry
asl A
rol ptr3+1 ; 2. shift ; perhaps carry
asl A
rol ptr3+1 ; 3. shift (C = 0 because 8*96 < $FFFF)
; here: (A:ptr3+1) = 8*ptr3
;; adc ptr3
;; bcc no_c1
;; inc ptr3+1
sta ptr3 ;; nur noch mal 8
;;no_c1:
;; ; and now: (A:ptr3+1) = 9*ptr3
;; asl ptr3 ; <96 => C = 0
;;
;; adc ptr3
;; sta ptr3
;; bcc no_c2
;; inc ptr3+1
clc ; clear Carry
no_c2:
**************
; now we have the offset, add the base-address to it:
lda ptr3
adc #<_char8_8
sta ptr3
lda ptr3+1
adc #>_char8_8
sta ptr3+1
; this was: chptr = &charset[z-32][0];
; and now copy the 8 bytes of that char
ldx tmp2
inx
stx tmp2
; draw char from top to bottom, reading char-data from offset 8-1 to offset 0
ldy #8-1
text_char
lda (ptr3),y ; *chptr
sta text2buffer,x ;textbuf[y*(1+len+1)+1+x]
txa
adc tmp3 ; text_off
tax
dey
bpl text_char
; goto next char
ldy tmp1
iny
dec tmp4 ;text_len
bne text_outloop
text_out
ldax #text2scb
;> jsr pushax
jmp DrawSprite
text2scb:
dc.b $00,$90,$20
dc.w 0,text2buffer
text2scbx:
dc.w 0
text2scby:
dc.w 0
text2scbstretchx:
dc.w $100
text2scbstretchy:
dc.w $100
text2scbcolor:
dc.b 0
text2buffer: ; 8 rows with (one offset-byte plus 20 character bytes plus one fill-byte) plus one 0-offset-byte
ds 8*(1+20+1)+1
***** The Font
***** 96 characters from ASCII 32 to 127
***** 8 pixels wide, 8 pixels high
***** bit value 0 = foreground, bit value 1 = background / transparent
_char8_8:
; Groábuchstaben (aus Charset 0)
dc.b $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF ;32
dc.b $FF, $E7, $FF, $FF, $E7, $E7, $E7, $E7 ;33
dc.b $FF, $FF, $FF, $FF, $FF, $99, $99, $99 ;34
dc.b $FF, $99, $99, $00, $99, $00, $99, $99 ;35
dc.b $FF, $E7, $83, $F9, $C3, $9F, $C1, $E7 ;36
dc.b $FF, $B9, $99, $CF, $E7, $F3, $99, $9D ;37
dc.b $FF, $C0, $99, $98, $C7, $C3, $99, $C3 ;38
dc.b $FF, $FF, $FF, $FF, $FF, $E7, $F3, $F9 ;39
dc.b $FF, $F3, $E7, $CF, $CF, $CF, $E7, $F3 ;40
dc.b $FF, $CF, $E7, $F3, $F3, $F3, $E7, $CF ;41
dc.b $FF, $FF, $99, $C3, $00, $C3, $99, $FF ;42
dc.b $FF, $FF, $E7, $E7, $81, $E7, $E7, $FF ;43
dc.b $CF, $E7, $E7, $FF, $FF, $FF, $FF, $FF ;44
dc.b $FF, $FF, $FF, $FF, $81, $FF, $FF, $FF ;45
dc.b $FF, $E7, $E7, $FF, $FF, $FF, $FF, $FF ;46
dc.b $FF, $9F, $CF, $E7, $F3, $F9, $FC, $FF ;47
dc.b $FF, $C3, $99, $99, $89, $91, $99, $C3 ;48
dc.b $FF, $81, $E7, $E7, $E7, $C7, $E7, $E7 ;49
dc.b $FF, $81, $9F, $CF, $F3, $F9, $99, $C3 ;50
dc.b $FF, $C3, $99, $F9, $E3, $F9, $99, $C3 ;51
dc.b $FF, $F9, $F9, $80, $99, $E1, $F1, $F9 ;52
dc.b $FF, $C3, $99, $F9, $F9, $83, $9F, $81 ;53
dc.b $FF, $C3, $99, $99, $83, $9F, $99, $C3 ;54
dc.b $FF, $E7, $E7, $E7, $E7, $F3, $99, $81 ;55
dc.b $FF, $C3, $99, $99, $C3, $99, $99, $C3 ;56
dc.b $FF, $C3, $99, $F9, $C1, $99, $99, $C3 ;57
dc.b $FF, $FF, $E7, $FF, $FF, $E7, $FF, $FF ;58
dc.b $CF, $E7, $E7, $FF, $FF, $E7, $FF, $FF ;59
dc.b $FF, $F1, $E7, $CF, $9F, $CF, $E7, $F1 ;60
dc.b $FF, $FF, $FF, $81, $FF, $81, $FF, $FF ;61
dc.b $FF, $8F, $E7, $F3, $F9, $F3, $E7, $8F ;62
dc.b $FF, $E7, $FF, $E7, $F3, $F9, $99, $C3 ;63
dc.b $FF, $C3, $9D, $9F, $91, $91, $99, $C3 ;0
dc.b $FF, $99, $99, $99, $81, $99, $C3, $E7 ;1
dc.b $FF, $83, $99, $99, $83, $99, $99, $83 ;2
dc.b $FF, $C3, $99, $9F, $9F, $9F, $99, $C3 ;3
dc.b $FF, $87, $93, $99, $99, $99, $93, $87 ;4
dc.b $FF, $81, $9F, $9F, $87, $9F, $9F, $81 ;5
dc.b $FF, $9F, $9F, $9F, $87, $9F, $9F, $81 ;6
dc.b $FF, $C3, $99, $99, $91, $9F, $99, $C3 ;7
dc.b $FF, $99, $99, $99, $81, $99, $99, $99 ;8
dc.b $FF, $C3, $E7, $E7, $E7, $E7, $E7, $C3 ;9
dc.b $FF, $C7, $93, $F3, $F3, $F3, $F3, $E1 ;10
dc.b $FF, $99, $93, $87, $8F, $87, $93, $99 ;11
dc.b $FF, $81, $9F, $9F, $9F, $9F, $9F, $9F ;12
dc.b $FF, $9C, $9C, $9C, $94, $80, $88, $9C ;13
dc.b $FF, $99, $99, $91, $81, $81, $89, $99 ;14
dc.b $FF, $C3, $99, $99, $99, $99, $99, $C3 ;15
dc.b $FF, $9F, $9F, $9F, $83, $99, $99, $83 ;16
dc.b $FF, $F1, $C3, $99, $99, $99, $99, $C3 ;17
dc.b $FF, $99, $93, $87, $83, $99, $99, $83 ;18
dc.b $FF, $C3, $99, $F9, $C3, $9F, $99, $C3 ;19
dc.b $FF, $E7, $E7, $E7, $E7, $E7, $E7, $81 ;20
dc.b $FF, $C3, $99, $99, $99, $99, $99, $99 ;21
dc.b $FF, $E7, $C3, $99, $99, $99, $99, $99 ;22
dc.b $FF, $9C, $88, $80, $94, $9C, $9C, $9C ;23
dc.b $FF, $99, $99, $C3, $E7, $C3, $99, $99 ;24
dc.b $FF, $E7, $E7, $E7, $C3, $99, $99, $99 ;25
dc.b $FF, $81, $9F, $CF, $E7, $F3, $F9, $81 ;26
dc.b $FF, $C3, $CF, $CF, $CF, $CF, $CF, $C3 ;27
dc.b $FF, $03, $9D, $CF, $83, $CF, $ED, $F3 ;28
dc.b $FF, $C3, $F3, $F3, $F3, $F3, $F3, $C3 ;29
dc.b $E7, $E7, $E7, $E7, $81, $C3, $E7, $FF ;30
dc.b $FF, $EF, $CF, $80, $80, $CF, $EF, $FF ;31
; Kleinbuchstaben (aus Charset 1):
dc.b $FF, $C3, $9D, $9F, $91, $91, $99, $C3 ;224
dc.b $FF, $C1, $99, $C1, $F9, $C3, $FF, $FF ;225
dc.b $FF, $83, $99, $99, $83, $9F, $9F, $FF ;226
dc.b $FF, $C3, $9F, $9F, $9F, $C3, $FF, $FF ;227
dc.b $FF, $C1, $99, $99, $C1, $F9, $F9, $FF ;228
dc.b $FF, $C3, $9F, $81, $99, $C3, $FF, $FF ;229
dc.b $FF, $E7, $E7, $E7, $C1, $E7, $F1, $FF ;230
dc.b $83, $F9, $C1, $99, $99, $C1, $FF, $FF ;231
dc.b $FF, $99, $99, $99, $83, $9F, $9F, $FF ;232
dc.b $FF, $C3, $E7, $E7, $C7, $FF, $E7, $FF ;233
dc.b $C3, $F9, $F9, $F9, $F9, $FF, $F9, $FF ;234
dc.b $FF, $99, $93, $87, $93, $9F, $9F, $FF ;235
dc.b $FF, $C3, $E7, $E7, $E7, $E7, $C7, $FF ;236
dc.b $FF, $9C, $94, $80, $80, $99, $FF, $FF ;237
dc.b $FF, $99, $99, $99, $99, $83, $FF, $FF ;238
dc.b $FF, $C3, $99, $99, $99, $C3, $FF, $FF ;239
dc.b $9F, $9F, $83, $99, $99, $83, $FF, $FF ;240
dc.b $F9, $F9, $C1, $99, $99, $C1, $FF, $FF ;241
dc.b $FF, $9F, $9F, $9F, $99, $83, $FF, $FF ;242
dc.b $FF, $83, $F9, $C3, $9F, $C1, $FF, $FF ;243
dc.b $FF, $F1, $E7, $E7, $E7, $81, $E7, $FF ;244
dc.b $FF, $C1, $99, $99, $99, $99, $FF, $FF ;245
dc.b $FF, $E7, $C3, $99, $99, $99, $FF, $FF ;246
dc.b $FF, $C9, $C1, $80, $94, $9C, $FF, $FF ;247
dc.b $FF, $99, $C3, $E7, $C3, $99, $FF, $FF ;248
dc.b $87, $F3, $C1, $99, $99, $99, $FF, $FF ;249
dc.b $FF, $81, $CF, $E7, $F3, $81, $FF, $FF ;250
dc.b $FF, $C3, $CF, $CF, $CF, $CF, $CF, $C3 ;251
dc.b $FF, $03, $9D, $CF, $83, $CF, $ED, $F3 ;252
dc.b $FF, $C3, $F3, $F3, $F3, $F3, $F3, $C3 ;253
dc.b $E7, $E7, $E7, $E7, $81, $C3, $E7, $FF ;254
dc.b $FF, $EF, $CF, $80, $80, $CF, $EF, $FF ;255
#endasm
Voilà le source

Vous le prenez, le copiez dans un fichier C (on dira first.C) et vous enregistrez le tout dans un répertoire que vous créez qu'on appellera "sources" (c:\panther\sources)
Ensuite, dans c:\panther créez un fichier GO.BAT avec le code suivant :
@echo off
c:
cd "C:\Panther"
set cc65lib=C:\Panther\ProMan\Library
set cc65include=C:\Panther\ProMan\Include
cd "C:\Panther\Compiled"
if exist error.txt del error.txt
cd "C:\Panther\sources\"
"C:\Panther\ProMan\Compiler\cc65" "%1.c" >>C:\Panther\Compiled\error.txt"
"C:\Panther\ProMan\Compiler\xopt" "%1.m65" >>"C:\Panther\Compiled\error.txt"
"C:\Panther\ProMan\Compiler\ra65" "%1.m65" -o "C:\Panther\Compiled\%1.obj" >>"C:\Panther\Compiled\error.txt"
del "%1.m65"
cd "C:\Panther\Compiled"
"C:\Panther\ProMan\Compiler\libr65" a "%1.olb" "%1.obj"
cd "C:\Panther\Compiled"
if exist error.txt type error.txt
cd "C:\Panther\Compiled"
"C:\Panther\ProMan\Compiler\link65" "%1.olb" "c.olb" "lynx.olb" -o "..\%1.o"
cd..
REM pensez à vérifier le chemin de handy et que le lynxboot.img y est présent...
start C:\handy0.82\handy.exe %1.o
cd\
cd "C:\Panther"
vous allez en ligne de commande dans c:\panther et vous tapez "GO first"
vous devez alors lire :
Replacing first.obj
Adding first.obj
et Handy doit se lancer...
Voilà vous venez de compiler votre premier programme.