* * Canal Meurtre (éditeur) * * (c) 1986, Froggy Software * (c) 2022, Antoine Vignau & Olivier Zardini * lst off rel dsk Fiche.l mx %00 xc xc *----------------------------------- Macros use 4/Ctl.Macs use 4/Desk.Macs use 4/Event.Macs use 4/Font.Macs use 4/Int.Macs use 4/Line.Macs use 4/Locator.Macs use 4/Mem.Macs use 4/Menu.Macs use 4/MIDISyn.Macs use 4/Misc.Macs use 4/Print.Macs use 4/Qd.Macs use 4/QdAux.Macs use 4/Resource.Macs use 4/Scrap.Macs use 4/Sound.Macs use 4/Std.Macs use 4/TextEdit.Macs use 4/Util.Macs use 4/Window.Macs *----------------------------------- Constantes *-------------- Softswitches KBD = $e0c000 KBDSTROBE = $e0c010 RDVBLBAR = $e0c019 GSOS = $e100a8 *-------------- GUI wMAIN = 1 refIsPointer = $0 refIsHandle = $1 refIsResource = $2 appleKey = $0100 mouseUpEvt = $0002 keyDownEvt = $0003 *-------------- dpFROM = $80 dpTO = dpFROM+4 dpFICHES = $90 ; pointeur vers NEWTV.BASE dpENTREE = dpFICHES+4 ; pointeur vers une fiche Debut = $a0 Arrivee = Debut+4 Second = Arrivee+4 *--- TRUE = 1 FALSE = 0 *--- Programme NB_FICHES = 200 ; nombre de fiches du jeu TAILLE_FICHE = 255 ; taille d'une fiche en octets *----------------------------------- Entry point phk plb _TLStartUp pha _MMStartUp pla sta myID tdc sta myDP *--- 64K pour les NEWTV.BASE jsr make64KB sty ptrFICHES sty proREAD+4 sty proWRITE+4 stx ptrFICHES+2 stx proREAD+6 stx proWRITE+6 jsr loadFILE jsr init_fiche *--- Chargement des outils pha pha PushWord myID PushWord #refIsResource PushLong #1 _StartUpTools PullLong SStopREC _InitCursor *--- Nettoie le cache de l'Event Manager PushWord #0 PushWord #%11111111_11111111 PushWord #0 _FlushEvents pla *---------------------------------------- * INITIALISATIONS *---------------------------------------- pha pha PushLong #0 PushLong #wMAIN PushLong #PAINTMAIN PushLong #0 PushWord #refIsResource PushLong #wMAIN PushWord #$800e _NewWindow2 PullLong wiMAIN jsr getFICHE *---------------------------------------- * TASK MASTER *---------------------------------------- taskLOOP PushWord #0 PushWord #0 PushWord #$c000 PushWord #0 _HandleDiskInsert pla pla PushWord #0 PushWord #%11111111_11111111 PushLong #taskREC _TaskMaster pla beq taskLOOP asl tax jsr (taskTBL,x) bra taskLOOP *----------------------------------- Gestion des contrôles (ça veut dire boutons ou lineedit) doCONTROL lda taskREC+38 dec asl tax jsr (taskCTL,x) rts taskCTL da doLINE da doLINE da doLINE da doLINE da doLINE da doQUIT da doPREVIOUS da doNEXT da doSAVE *---------------------------------------- * CODE DU JEU *---------------------------------------- doNOT *--- Les Line Edit doLINE rts *--- Bouton Enregistrer doSAVE jsr putFICHE jmp saveFILE *--- Bouton Quitter doQUIT jsr doSAVE meQUIT PushWord #refIsHandle PushLong SStopREC _ShutDownTools meQUIT1 PushWord myID _DisposeAll PushWord myID _MMShutDown _TLShutDown jsl GSOS dw $2029 adrl proQUIT brk $bd *--- Bouton Fiche précédente doPREVIOUS jsr putFICHE lda P cmp #1 bne okPREV rts okPREV sec sbc #1 sta P jmp getFICHE *--- Bouton Fiche suivante doNEXT jsr putFICHE lda P cmp nbFICHES bcc okNEXT beq okNEXT rts okNEXT clc adc #1 sta P jmp getFICHE *---------------------------------------- * GESTION DES FICHES *---------------------------------------- *----------------------- * printP - affiche le numéro de la fiche *----------------------- printP lda #' ' sta strP sta strP+2 PushWord P PushLong #strP PushWord #3 PushWord #FALSE _Int2Dec pha pha _GetPort PushLong wiMAIN _SetPort PushWord #210 PushWord #130 _MoveTo PushLong #strP _DrawCString _SetPort rts strP asc ' '00 *----------------------- * getFICHE - De F à la fenêtre *----------------------- getFICHE jsr get_fiche sep #$30 lda #40 ; Tell length is 40 chars sta B1_6 sta B1_8 sta B1_10 sta B1_12 sta B1_14 ldx #0 ; Move strings to the buffer ]lp lda C2_6,x sta B2_6,x lda C2_8,x sta B2_8,x lda C2_10,x sta B2_10,x lda C2_12,x sta B2_12,x lda C2_14,x sta B2_14,x inx cpx #40 bcc ]lp rep #$30 PushLong wiMAIN ; Set LE PushLong #1 PushLong #B1_6 _SetLETextByID PushLong wiMAIN PushLong #2 PushLong #B1_8 _SetLETextByID PushLong wiMAIN PushLong #3 PushLong #B1_10 _SetLETextByID PushLong wiMAIN PushLong #4 PushLong #B1_12 _SetLETextByID PushLong wiMAIN PushLong #5 PushLong #B1_14 _SetLETextByID jmp printP *----------------------- * putFICHE - De la fenêtre à F *----------------------- putFICHE PushLong wiMAIN ; Get LE PushLong #1 PushLong #B1_6 _GetLETextByID PushLong wiMAIN PushLong #2 PushLong #B1_8 _GetLETextByID PushLong wiMAIN PushLong #3 PushLong #B1_10 _GetLETextByID PushLong wiMAIN PushLong #4 PushLong #B1_12 _GetLETextByID PushLong wiMAIN PushLong #5 PushLong #B1_14 _GetLETextByID sep #$30 ldx #0 ; Clear destination strings lda #' ' ]lp sta C2_6,x sta C2_8,x sta C2_10,x sta C2_12,x sta C2_14,x inx cpx #40 bcc ]lp ldx B1_6 ; Move strings to buffer beq pf_2 ldx #0 ]lp lda B2_6,x sta C2_6,x inx cpx B1_6 bcc ]lp pf_2 ldx B1_8 beq pf_3 ldx #0 ]lp lda B2_8,x sta C2_8,x inx cpx B1_8 bcc ]lp pf_3 ldx B1_10 beq pf_4 ldx #0 ]lp lda B2_10,x sta C2_10,x inx cpx B1_10 bcc ]lp pf_4 ldx B1_12 beq pf_5 ldx #0 ]lp lda B2_12,x sta C2_12,x inx cpx B1_12 bcc ]lp pf_5 ldx B1_14 beq pf_6 ldx #0 ]lp lda B2_14,x sta C2_14,x inx cpx B1_14 bcc ]lp pf_6 rep #$30 jmp set_fiche ; and save the data at ptrFICHES *----------------------- * init_fiche *----------------------- init_fiche stz nbFICHES ; 0 texts on entry lda proEOF ; is file empty? ora proEOF+2 bne if1 rts if1 lda ptrFICHES sta dpFROM clc adc proEOF sta dpTO lda ptrFICHES+2 sta dpFROM+2 adc proEOF+2 sta dpTO+2 if2 lda dpFROM+2 ; did we reach the end of the file? cmp dpTO+2 bcc if3 lda dpFROM cmp dpTO bcc if3 rts ; we are done! if3 lda nbFICHES ; save the address of the string asl asl tax lda dpFROM sta tblFICHES,x lda dpFROM+2 sta tblFICHES+2,x lda dpFROM clc adc #TAILLE_FICHE sta dpFROM lda dpFROM+2 adc #0 sta dpFROM+2 inc nbFICHES ; increment the number of strings lda nbFICHES ; into our limit cmp #NB_FICHES bcc if2 rts *----------------------- * get_fiche(fiche%) - From ptrFICHES to F *----------------------- get_fiche lda P bne get_fiche1 rts get_fiche1 cmp nbFICHES bcc get_fiche2 beq get_fiche2 rts get_fiche2 dec asl asl tax lda tblFICHES,x sta dpFICHES lda tblFICHES+2,x sta dpFICHES+2 ldy #TAILLE_FICHE-1 sep #$20 ]lp lda [dpFICHES],y sta F,y dey bpl ]lp rep #$20 rts *----------------------- * set_fiche(fiche%) - From F to ptrFICHES *----------------------- set_fiche lda P bne set_fiche1 rts set_fiche1 cmp nbFICHES bcc set_fiche2 beq set_fiche2 rts set_fiche2 dec asl asl tax lda tblFICHES,x sta dpFICHES lda tblFICHES+2,x sta dpFICHES+2 ldy #TAILLE_FICHE-1 sep #$20 ]lp lda F,y sta [dpFICHES],y dey bpl ]lp rep #$20 rts *---------------------------------------- Les données d'une fiche P dw 1 ; 1ère fiche nbFICHES ds 2 tblFICHES ds 4*NB_FICHES F ds 1 ; fiche OK (non zero) ou KO (zero) C2_1 ds 2 C2_2 ds 25 C2_3 ds 2 C2_4 ds 2 C2_5 ds 4 C2_6 ds 40 C2_7 ds 4 C2_8 ds 40 C2_9 ds 4 C2_10 ds 40 C2_11 ds 4 C2_12 ds 40 C2_13 ds 4 C2_14 ds 40 ds 3 ; garbage *---------------------------------------- Les données des LineEdit B1_6 ds 1 B2_6 ds 40 B1_8 ds 1 B2_8 ds 40 B1_10 ds 1 B2_10 ds 40 B1_12 ds 1 B2_12 ds 40 B1_14 ds 1 B2_14 ds 40 ds 117 ; bad coder... *---------------------------------------- * FENETRES *---------------------------------------- PAINTMAIN PushLong wiMAIN _DrawControls rtl *---------------------------------------- * MEMOIRE *---------------------------------------- make64KB pha pha PushLong #$010000 PushWord myID PushWord #%11000000_00011100 PushLong #0 _NewHandle phd tsc tcd lda [3] tax ; low in X ldy #2 lda [3],y txy ; low in Y tax ; high in X pld pla ; we do not keep track of the handle pla rts *---------------------------------------- * DATA *---------------------------------------- *----------------------- Fenetres wiMAIN ds 4 *----------------------- Memory manager myID ds 2 myDP ds 2 SStopREC ds 4 ptrFICHES ds 4 *----------------------- Window manager taskREC ds 2 ; wmWhat +0 taskMESSAGE ds 4 ; wmMessage +2 taskWHEN ds 4 ; wmWhen +6 taskWHERE ds 4 ; wmWhere +10 taskMODIFIERS ds 2 ; wmModifiers +14 taskDATA ds 4 ; wmTaskData +16 adrl $001fffff ; wmTaskMask +20 ds 4 ; wmLastClickTick +24 ds 2 ; wmClickCount +28 ds 4 ; wmTaskData2 +30 ds 4 ; wmTaskData3 +34 ds 4 ; wmTaskData4 +38 ds 4 ; wmLastClickPt +42 taskTBL da doNOT ; Null da doNOT ; mouseDownEvt da doNOT ; mouseUpEvt da doNOT ; keyDownEvt da doNOT da doNOT ; autoKeyEvt da doNOT ; updateEvt da doNOT da doNOT ; activateEvt da doNOT ; switchEvt da doNOT ; deskAccEvt da doNOT ; driverEvt da doNOT ; app1Evt da doNOT ; app2Evt da doNOT ; app3Evt da doNOT ; app4Evt da doNOT ; wInDesk da doNOT ; wInMenuBar da doNOT ; wCLickCalled da doNOT ; wInContent - was doCONTENT da doNOT ; wInDrag da doNOT ; wInGrow da doNOT ; wInGoAway da doNOT ; wInZoom da doNOT ; wInInfo da doNOT ; wInSpecial da doNOT ; wInDeskItem da doNOT ; wInFrame da doNOT ; wInactMenu da doNOT ; wInClosedNDA da doNOT ; wInCalledSysEdit da doNOT ; wInTrackZoom da doNOT ; wInHitFrame da doCONTROL ; wInControl da doNOT ; wInControlMenu *---------------------------------------- * GS/OS *---------------------------------------- loadFILE jsl GSOS dw $2010 adrl proOPEN lda proOPEN+2 sta proREAD+2 sta proCLOSE+2 lda proEOF sta proREAD+8 lda proEOF+2 sta proREAD+10 jsl GSOS dw $2012 adrl proREAD jsl GSOS dw $2014 adrl proCLOSE rts *--- saveFILE jsl GSOS dw $2010 adrl proOPEN lda proOPEN+2 sta proWRITE+2 sta proCLOSE+2 lda proEOF sta proWRITE+8 lda proEOF+2 sta proWRITE+10 jsl GSOS dw $2013 adrl proWRITE jsl GSOS dw $2014 adrl proCLOSE rts *--- GS/OS data proOPEN dw 12 ds 2 adrl pFICHES ds 2 ds 2 ds 2 ds 2 ds 4 ds 2 ds 8 ds 8 ds 4 proEOF ds 4 proREAD dw 4 ; 0 - nb parms ds 2 ; 2 - file id ds 4 ; 4 - pointer ds 4 ; 8 - length ds 4 ; C - length read proWRITE dw 5 ; 0 - pcount ds 2 ; 2 - ref_num ds 4 ; 4 - data_buffer (we are in same bank) ds 4 ; 8 - request_count ds 4 ; C - transfer_count dw 1 ; cache_priority proCLOSE dw 1 ds 2 proQUIT dw 2 ; pcount ds 4 ; pathname ds 2 ; flags *--- pFICHES strl '1/NEWTV.BASE'