*----------------------------------------------------------- * Program Number: Forritunarverkefni 4 * Written by : Sævar Öfjörð Magnússon * Date Created : 2005-04-09 * Description : *----------------------------------------------------------- GETNUM MACRO move.b #4,d0 ; get user guess in D1.L trap #15 ENDM GETCHAR MACRO move.b #5,d0 trap #15 ENDM PRINT MACRO ; macro til að prenta stærri texta lea \1,a1 ; hlaða inn addressu move.b #14,d0 ; trap kóði trap #15 ENDM CLS MACRO ; macro til að hreinsa display move.l #$FF00,D1 move.b #11,D0 trap #15 ; clear display ENDM ORG $800 SPACE equ $20 ; space CR equ $0d ; carriage return LF equ $0a ; line feed newline dc.b CR,LF,0 selkey dc.b 'Select a key to execute a function: ',0 enternum dc.b 'Enter a number (0-65535): ',0 displist dc.b 'The list contains: ',0 adgerdir dc.b 'Functions: (I)nsert item - (D)elete item - ' dc.b '(E)mpty list - (Q)uit',CR,LF,CR,LF,0 quitmsg dc.b 'Are you sure you want to quit? (Y/N) ',0 delmsg dc.b 'Enter the number you wish to delete: ',0 errempty dc.b 'The list is empty',CR,LF,CR,LF,0 error1 dc.b 'ERROR: The list is full, try to delete items' dc.b ' before inserting.',CR,LF,CR,LF,0 error2 dc.b 'ERROR: The item you were trying to delete is ' dc.b 'not in this list. Try again.',CR,LF,CR,LF,0 listemptied dc.b 'List has been emptied. It contained: ',0 LIMIT equ $1FF0 START ORG $1000 move #$203C,LIMIT move #0,A2 move #$2000,A3 MAIN CLS bsr HEADER MAIN2 PRINT selkey GETCHAR and #$DF,D1 ; breytum í hástaf cmp.b #$44,D1 ; athugum hvort það sé D beq OKDELETE cmp.b #$45,D1 ; athugum hvort það sé E beq OKEMPTY cmp.b #$51,D1 ; athugum hvort það sé Q beq OKQUIT cmp.b #$49,D1 ; athugum hvort það sé I beq OKINSERT bra MAIN OKDELETE bsr DELETION bra MAIN OKEMPTY bsr EMPTY bra MAIN2 OKINSERT bsr INSERTION bra MAIN OKQUIT bsr QUIT bra MAIN ERRORFULL CLS bsr HEADER PRINT error1 bra MAIN2 ERROREXIST CLS bsr HEADER PRINT error2 bra MAIN2 ********************************************* HEADER: ********************************************* PRINT adgerdir PRINT displist bsr PRENTALISTA rts ********************************************* INSERTION: ********************************************* CLS bsr HEADER PRINT enternum GETNUM cmp LIMIT,A3 bge ERRORFULL move D1,(A3) cmp #0,A2 ; athuga hvort haus sé núll (listi tómur) bgt HEAD move A3,A2 ; setja adressu á nýrri færslu í haus add #$6,A3 ; hækkum pointer um 6 move A2,A6 ; setjum hausinn í bendi á fyrri færslu rts HEAD move (A3),D3 cmp (A2),D3 ; athugum hvort nýja færsla verði haus bge SEARCH ; ef ekki þarf að leita move A2,4(A3) move A3,A2 add #$6,A3 move A2,A6 ; setjum hausinn í bendi á fyrri færslu rts SEARCH move A2,A4 ; Afritum hausbendi í leitarbendi move a2,a6 LOOP1 move 4(A4),A5 ; afritum addressu á næstu færslu í a5 cmp #0,A5 ; athugum hvort þetta sé endir á lista beq TAIL cmp (A5),D3 ble INSERT move A5,A4 add #6,A6 bra LOOP1 INSERT move A4,A6 move A5,4(A3) move A6,2(A3) move A3,4(A4) move A3,2(A5) TAIL move A3,4(A4) move A6,2(A3) move A4,A6 ; setjum teljarann í bendi á fyrri færslu add #$6,A3 rts ********************************************* DELETION: ********************************************* CLS bsr HEADER PRINT delmsg GETNUM cmp (A2),D1 ; bera saman við tölu sem eyða á bgt SEARCH2 move 4(A2),A2 rts SEARCH2 move A2,A4 LOOP3 cmp #0,A4 beq ERROREXIST move 4(A4),A5 move 2(A4),A6 cmp (A5),D1 beq DELETE move A5,A4 bra LOOP3 DELETE move 4(A5),A1 move A1,4(A4) move 2(A5),A6 move A6,2(A1) add #6,LIMIT rts ********************************************* PRENTALISTA: ********************************************* move A2,A4 cmp #0,A2 ; er listi tómur? bne LOOP2 PRINT errempty move #$2000,A3 move #0,A2 rts LOOP2 move (A4),D1 move #3,D0 trap #15 move.b #6,D0 ; trap kóði 6 move.b #$20,D1 ; setjum stafabil í d1 trap #15 ; birtum það sem er í D1 move 4(A4),A5 move A5,A4 cmp #0,A5 bne LOOP2 PRINT newline PRINT newline rts ********************************************* EMPTY: ********************************************* CLS PRINT adgerdir PRINT listemptied move A2,A4 LOOP4 move 4(A4),A5 move (A4),D1 move #3,D0 trap #15 move.b #6,D0 ; trap kóði 6 move.b #$20,D1 ; setjum stafabil í d1 trap #15 ; birtum það sem er í D1 move #0,2(A4) move #0,4(A4) move A5,A4 cmp #0,A4 bne LOOP4 PRINT newline PRINT newline move #$2000,A3 move #0,A2 move.l #0,(A3) move #0,4(A3) rts ********************************************* QUIT: ********************************************* CLS ; hreinsa skjáinn bsr HEADER PRINT quitmsg ; spyrja hvort notandi vilji hætta move.b #5,D0 ; biðja um einn staf (trap kóði) trap #15 ; biðjum um já eða nei and #$DF,D1 ; breytum í hástaf cmp.b #$59,D1 ; athugum hvort það sé Y beq END ; hættum alveg keyrslu ef Y cmp.b #$4e,D1 ; athugum hvort það sé N rts END MOVE.B #9,D0 TRAP #15 Halt Simulator END START *~Font name~Courier New~ *~Font size~10~ *~Tab type~1~ *~Tab size~12~